diff -r 0818dd463d41 -r 924385140d98 appfw/apparchitecture/tef/t_clientnotifstep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/appfw/apparchitecture/tef/t_clientnotifstep.cpp Tue Aug 31 15:24:25 2010 +0300 @@ -0,0 +1,851 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent - Internal Symbian test code +*/ + +#include "t_clientnotifstep.h" +#include +#include +#include "T_SisFileInstaller.h" +#include +#include + +_LIT(KSimpleAppSisFile, "z:\\apparctest\\apparctestsisfiles\\SimpleApparcTestApp.sis"); +_LIT(KSimpleAppComponent, "SimpleApparcTestApp"); + +_LIT(KTestMultipleAppsSisFile, "z:\\apparctest\\apparctestsisfiles\\TestMultipleApps.sis"); +_LIT(KTestMultipleAppsComponent, "TestMultipleApps"); + +_LIT(KTestMultipleAppsDowngradeSisFile, "z:\\apparctest\\apparctestsisfiles\\TestMultipleAppsDowngrade.sis"); +_LIT(KTestMultipleAppsDowngradeComponent, "TestMultipleApps"); + +_LIT(KTstAppStandAloneSisFile, "z:\\apparctest\\apparctestsisfiles\\TSTAPP_standalone.sis"); +_LIT(KTstAppStandAloneComponent, "TSTAPP_standalone"); + +const TUid KUidSimpleApp={0x12008ACE}; +const TUid KUidMultipleApp1={0x102032AB}; +const TUid KUidMultipleApp2={0x10208183}; +const TUid KUidMultipleApp3={0x10208184}; +const TUid KUidTstAppStandalone={10}; + +CT_ClientNotifStep::~CT_ClientNotifStep() +/** + Destructor + */ + { + } + +CT_ClientNotifStep::CT_ClientNotifStep() +/** + Constructor + */ + { + // Call base class method to set up the human readable name for logging + SetTestStepName(KT_ClientNotifStep); + } + +TVerdict CT_ClientNotifStep::doTestStepPreambleL() +/** + @return - TVerdict code + Override of base class virtual + */ + { + SetTestStepResult(EPass); + return TestStepResult(); + } + +TVerdict CT_ClientNotifStep::doTestStepPostambleL() +/** + @return - TVerdict code + Override of base class virtual + */ + { + return TestStepResult(); + } + + +TVerdict CT_ClientNotifStep::doTestStepL() +{ + RunTestCases(); + return TestStepResult(); +} + + +void CT_ClientNotifStep::RunTestCases() + { + RTestableApaLsSession ls; + User::LeaveIfError(ls.Connect()); + + TApaAppInfo info; + TUid uid = {0x12008ACE}; + TInt err = ls.GetAppInfo(info, uid); + if(err == KErrNone) + { + CSisFileInstaller sisFileInstaller; + sisFileInstaller.UninstallSisL(KSimpleAppComponent); + } + + //DONT_CHECK is used because when an application is installed the updated application + //information is added in the session objects. This causes increase of memory at server side. + //As there can be multiple applications registered with apparc for applist change notifications, + //its not possible to clear the information in all the session objects. + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifInitialApplistCreation(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifLanguageChange(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifSingleAppInstallation(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifMultipleAppInstallation(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifUpgradeApp(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifMultipleInstallations(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifWithoutSetNotify(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifOnPackageUpgrade(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestClientNotifOnPackageDowngrade(ls), NO_CLEANUP); + ls.Close(); + } + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests apparc will not provide updated application information when the application list + created first time after device bootup. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Wait till the applist got created after phone boot. + 2. Retrieve the updated application information and check it is empty. + + + @SYMTestExpectedResults Apparc will not provide updated application information. + */ +void CT_ClientNotifStep::TestClientNotifInitialApplistCreation(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestClientNotifInitialApplistCreation started............")); + + TRequestStatus applistChangeStatus; + TRequestStatus applistCreationStatus; + //Register with apparc for applist change notification + aLs.SetNotify(ETrue, applistChangeStatus); + aLs.RegisterListPopulationCompleteObserver(applistCreationStatus); + User::WaitForRequest(applistCreationStatus); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d expected: 0"), updatedAppsInfo.Count()); + TEST(updatedAppsInfo.Count() == 0); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestClientNotifInitialApplistCreation ended............")); + } + + +void CT_ClientNotifStep::ChangeLocaleL(TLanguage aLanguage) + { + _LIT(KLitLanguageLocaleDllNameBase, "elocl_lan"); + //Region and collation code values are hard coded, as the check, after changing the locale is made for the language only. + _LIT(KLitRegionLocaleDllNameBase, "elocl_reg.826"); + _LIT(KLitCollationLocaleDllNameBase, "elocl_col.001"); + _LIT(ThreeDigExt,".%03d"); + TExtendedLocale localeDll; + const TUidType uidType(TUid::Uid(0x10000079),TUid::Uid(0x100039e6)); + TBuf<16> languageLocaleDllName(KLitLanguageLocaleDllNameBase); + languageLocaleDllName.AppendFormat(ThreeDigExt, aLanguage); + TBuf<16> regionLocaleDllName(KLitRegionLocaleDllNameBase); + TBuf<16> collationLocaleDllName(KLitCollationLocaleDllNameBase); + // Try to load the locale dll + TInt error=localeDll.LoadLocale(languageLocaleDllName, regionLocaleDllName, collationLocaleDllName); + + if (error==KErrNotFound) + { + // Locale dll is not found for the asked language. + ERR_PRINTF2(_L("Failed to find the locale dll for %d"), aLanguage); + } + + User::LeaveIfError(error); + localeDll.SaveSystemSettings(); + } + + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests apparc will not provide updated application information when the application list + updated due phone language change. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Wait till the applist got updated after phone language change. + 2. Retrieve the updated application information and check it is empty. + + + @SYMTestExpectedResults Apparc will not provide updated application information. + */ +void CT_ClientNotifStep::TestClientNotifLanguageChange(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestClientNotifLanguageChange started............")); + + TRequestStatus applistChangeStatus; + aLs.SetNotify(EFalse, applistChangeStatus); + //Change language + ChangeLocaleL(ELangGerman); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + TEST(updatedAppsInfo.Count() == 0); + + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + ChangeLocaleL(ELangEnglish); + User::WaitForRequest(applistChangeStatus); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestClientNotifInitialApplistCreation ended............")); + } + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests whether apparc provides updated application information when single application is installed + and uninstalled. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Installs a sis file which has single application and waits till applist is changed. + 2. Checks the updated information provided by apparc is as expected. + 3. Uninstalls the component installed in Step 1 + 4. Checks the updated information provided by apparc is as expected. + + + @SYMTestExpectedResults Apparc provides updated application information., + */ +void CT_ClientNotifStep::TestClientNotifSingleAppInstallation(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestSingleAppInstallation started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Installing single application")); + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KSimpleAppSisFile); + sisInstaller.InstallSisL(KSimpleAppSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 1); + TEST(updatedAppsInfo[0].iAppUid == KUidSimpleApp); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is available in the applist. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo, KUidSimpleApp) == KErrNone); + + INFO_PRINTF1(_L("Unnstalling single application")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KSimpleAppComponent); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 1); + TEST(updatedAppsInfo[0].iAppUid == KUidSimpleApp); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppNotPresent); + + //Check the application is not available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidSimpleApp) == KErrNotFound); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestSingleAppInstallation ended............")); + } + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests whether apparc provides updated application information when multiple applications are installed + and uninstalled. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Installs a sis file which has multiple applications and waits till applist is changed. + 2. Checks the updated information provided by apparc is as expected. + 3. Uninstalls the component installed in Step 1 + 4. Checks the updated information provided by apparc is as expected. + + + @SYMTestExpectedResults Apparc provides updated application information. + */ + +void CT_ClientNotifStep::TestClientNotifMultipleAppInstallation(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestMultipleAppInstallation started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Installing multiple applications")); + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTestMultipleAppsSisFile); + sisInstaller.InstallSisL(KTestMultipleAppsSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 3); + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is available in the applist. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNone); + + INFO_PRINTF1(_L("Uninstalling multiple applications")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KTestMultipleAppsComponent); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + TEST(updatedAppsInfo.Count()== 3); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppNotPresent); + + //Check the application is not available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNotFound); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestMultipleAppInstallation ended............")); + } + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests whether apparc provides updated application information when an applications is + upgraded. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Checks whether upgrading application exists in applist. + 2. Installs a sis file which upgrades existing applications and waits till applist is changed. + 2. Checks the updated information provided by apparc is as expected. + 3. Uninstalls the component installed in Step 2 + 4. Checks the updated information provided by apparc is as expected. + + + @SYMTestExpectedResults Apparc provides updated application information. + */ +void CT_ClientNotifStep::TestClientNotifUpgradeApp(RTestableApaLsSession &aLs) +{ + INFO_PRINTF1(_L("TestClientNotifUpgradeApp started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Check the application is present before upgrade")); + //Check the application is available in the applist. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo, KUidTstAppStandalone) == KErrNone); + + INFO_PRINTF1(_L("Installing upgrade application")); + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTstAppStandAloneSisFile); + sisInstaller.InstallSisL(KTstAppStandAloneSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 1); + TEST(updatedAppsInfo[0].iAppUid == KUidTstAppStandalone); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidTstAppStandalone) == KErrNone); + + INFO_PRINTF1(_L("Unnstalling upgrade application")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KTstAppStandAloneComponent); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 1); + TEST(updatedAppsInfo[0].iAppUid == KUidTstAppStandalone); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is still available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidTstAppStandalone) == KErrNone); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestClientNotifUpgradeApp ended............")); +} + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests whether apparc provides updated application information when there are multiple installations + happened before the clients requests for updated application information. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Installs a sis file and waits till applist is changed. + 2. Installs another sis file and waits till applist is changed. + 3. Checks the updated information provided by apparc is as expected. + 4. Uninstalls the component installed in Step 1 and waits till applist is changed. + 5. Uninstalls the component installed in Step 2 and waits till applist is changed. + 6. Checks the updated information provided by apparc is as expected. + + + @SYMTestExpectedResults Apparc provides updated application information. + */ +void CT_ClientNotifStep::TestClientNotifMultipleInstallations(RTestableApaLsSession &aLs) +{ + INFO_PRINTF1(_L("TestClientNotifMultipleInstallations started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Installing first sis file")); + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KSimpleAppSisFile); + sisInstaller.InstallSisL(KSimpleAppSisFile); + User::WaitForRequest(applistChangeStatus); + + INFO_PRINTF1(_L("Installing second sis file")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTestMultipleAppsSisFile); + sisInstaller.InstallSisL(KTestMultipleAppsSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installations")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 4); + TEST(updatedAppsInfo[0].iAppUid == KUidSimpleApp); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[3].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the applications is available in the applist. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo, KUidSimpleApp) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNone); + + INFO_PRINTF1(_L("Unnstalling first component")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KSimpleAppComponent); + User::WaitForRequest(applistChangeStatus); + + INFO_PRINTF1(_L("Unnstalling second component")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KTestMultipleAppsComponent); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 4); + TEST(updatedAppsInfo[0].iAppUid == KUidSimpleApp); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[3].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[3].iAction == TApaAppUpdateInfo::EAppNotPresent); + + //Check the applications are not available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidSimpleApp) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNotFound); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestClientNotifMultipleInstallations ended............")); +} + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests apparc will not provide updated application information if SetNotify is not called + on an apparc session. Apparc only maintains updated application information with the sessions + which actually requested SetNotify and not yet called UpdatedAppsInfoL API. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Installs a sis file which has single application and waits till applist is changed. + 2. Retrieves the updated applist from different apparc session and checks the list is empty. + + + @SYMTestExpectedResults Apparc provides updated application information. + */ +void CT_ClientNotifStep::TestClientNotifWithoutSetNotify(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestClientNotifWithoutSetNotify started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Installing application")); + sisInstaller.InstallSisAndWaitForAppListUpdateL(KSimpleAppSisFile); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 0); + + INFO_PRINTF1(_L("Unnstalling application")); + sisInstaller.UninstallSisAndWaitForAppListUpdateL(KSimpleAppComponent); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 0); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestClientNotifWithoutSetNotify ended............")); + } + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests whether apparc provides updated application information a component is upgraded. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Installs a sis file which has 2 applications and waits till applist is changed. + 2. Checks the updated information provided by apparc is as expected. + 3. Upgrades the component which is installed in Step 1 which has one more application. + 4. Checks the updated information provided by apparc is as expected. + 3. Uninstalls the component installed in Step 3 + 4. Checks the updated information provided by apparc is as expected. + + + @SYMTestExpectedResults Apparc provides updated application information. + */ + +void CT_ClientNotifStep::TestClientNotifOnPackageUpgrade(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestClientNotifOnPackageUpgrade started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Installing sis file which has 2 applications")); + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTestMultipleAppsDowngradeSisFile); + sisInstaller.InstallSisL(KTestMultipleAppsDowngradeSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 2); + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is available in the applist. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNone); + + + INFO_PRINTF1(_L("Installing upgrade sis file which has 3 applications")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTestMultipleAppsSisFile); + sisInstaller.InstallSisL(KTestMultipleAppsSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 3); + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNone); + + INFO_PRINTF1(_L("Uninstalling applications ............")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KTestMultipleAppsComponent); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + TEST(updatedAppsInfo.Count()== 3); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppNotPresent); + + //Check the application is not available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNotFound); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestMultipleAppInstallation ended............")); + } + + + +/** + @SYMTestCaseID APPFWK-APPARC-0106 + + + @SYMTestCaseDesc Tests whether apparc provides updated application information a component is upgraded. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions 1. Installs a sis file which has 3 applications and waits till applist is changed. + 2. Checks the updated information provided by apparc is as expected. + 3. Degrades the component which is installed in Step 1 which has only 2 applications. + 4. Checks the updated information provided by apparc is as expected. + 3. Uninstalls the component installed in Step 3 + 4. Checks the updated information provided by apparc is as expected. + + + @SYMTestExpectedResults Apparc provides updated application information. + */ + +void CT_ClientNotifStep::TestClientNotifOnPackageDowngrade(RTestableApaLsSession &aLs) + { + INFO_PRINTF1(_L("TestClientNotifOnPackageDowngrade started............")); + CSisFileInstaller sisInstaller; + TRequestStatus applistChangeStatus; + + INFO_PRINTF1(_L("Installing sis file which has 3 applications")); + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTestMultipleAppsSisFile); + sisInstaller.InstallSisL(KTestMultipleAppsSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + RArray updatedAppsInfo; + CleanupClosePushL(updatedAppsInfo); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 3); + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppPresent); + + + //Check the application is available in the applist. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNone); + + + INFO_PRINTF1(_L("Installing sis file which has only 2 applications")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTestMultipleAppsDowngradeSisFile); + sisInstaller.InstallSisL(KTestMultipleAppsDowngradeSisFile); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after installation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo.Count()== 3); + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp1); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppPresent); + TEST(updatedAppsInfo[2].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[2].iAction == TApaAppUpdateInfo::EAppPresent); + + //Check the application is not available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp1) == KErrNotFound); + + //Check the application is available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNone); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNone); + + + INFO_PRINTF1(_L("Uninstalling applications")); + applistChangeStatus=KRequestPending; + aLs.SetNotify(EFalse, applistChangeStatus); + sisInstaller.UninstallSisL(KTestMultipleAppsDowngradeComponent); + User::WaitForRequest(applistChangeStatus); + + //Get the updated application information from apparc. + updatedAppsInfo.Reset(); + INFO_PRINTF1(_L("Retrieving updated application information after uninstallation")); + aLs.UpdatedAppsInfoL(updatedAppsInfo); + INFO_PRINTF2(_L("Updated application count: %d"), updatedAppsInfo.Count()); + TEST(updatedAppsInfo.Count()== 2); + + //Check the information provided by apparc is what is expected. + TEST(updatedAppsInfo[0].iAppUid == KUidMultipleApp2); + TEST(updatedAppsInfo[0].iAction == TApaAppUpdateInfo::EAppNotPresent); + TEST(updatedAppsInfo[1].iAppUid == KUidMultipleApp3); + TEST(updatedAppsInfo[1].iAction == TApaAppUpdateInfo::EAppNotPresent); + + //Check the application is not available in the applist. + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp2) == KErrNotFound); + TEST(aLs.GetAppInfo(appInfo, KUidMultipleApp3) == KErrNotFound); + + CleanupStack::PopAndDestroy(); //updatedAppsInfo + INFO_PRINTF1(_L("TestClientNotifOnPackageDowngrade ended............")); + }