--- /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 <e32base.h>
+#include <e32cmn.h>
+#include "T_SisFileInstaller.h"
+#include <apgtask.h>
+#include <apgnotif.h>
+
+_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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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<TApaAppUpdateInfo> 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............"));
+ }