diff -r aa99f2208aad -r b8d18c84f71c localisation/apparchitecture/tef/T_ServiceRegistryStep.cpp --- a/localisation/apparchitecture/tef/T_ServiceRegistryStep.cpp Wed Jul 28 16:03:37 2010 +0100 +++ b/localisation/apparchitecture/tef/T_ServiceRegistryStep.cpp Tue Aug 03 10:20:34 2010 +0100 @@ -1,7 +1,7 @@ // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available -// under the terms of the License "Eclipse Public License v1.0" +// 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". // @@ -13,8 +13,6 @@ // Description: // - - /** @file @test @@ -22,9 +20,21 @@ */ #include "T_ServiceRegistryStep.h" -#include +#include #include "testableapalssession.h" -#include "appfwk_test_utils.h" +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + + + +_LIT(KImportAppsDir,"c:\\private\\10003a3f\\import\\apps\\"); +_LIT(KAppRscSourcePath,"z:\\system\\data\\TestUpdRegAppUninstallation_reg.rsc"); +_LIT(KUpgradeAppRscSourcePath,"z:\\system\\data\\TestUpgradeUpdRegAppUninstallation_reg.rsc"); +_LIT(KAppRscTargetPath,"c:\\private\\10003a3f\\import\\apps\\TestUpdRegAppUninstallation_reg.rsc"); + +_LIT8(KLitMimeType,"mime/updregappuninstall"); +_LIT8(KLitUpgradeAppMimeType,"mime/upgradeupdregappuninstall"); /** * Constructor @@ -65,10 +75,10 @@ { INFO_PRINTF1(_L("Testing Apparc...T_ServiceRegistry Test Cases Running...")); - // start an active scheduler - iScheduler=new(ELeave) CActiveScheduler(); - CActiveScheduler::Install(iScheduler); - + // start an active scheduler + iScheduler=new(ELeave) CActiveScheduler(); + CActiveScheduler::Install(iScheduler); + __UHEAP_MARK; TInt ret; TRAP(ret,RunTestCasesL()) @@ -94,6 +104,7 @@ HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestAssociation1L(), NO_CLEANUP); HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestAppForDataTypeAndServiceL(ls), NO_CLEANUP); HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestUpdateOfServiceRegistryOnAppUninstallationL(ls), NO_CLEANUP); + HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, TestServiceRegistryOnAppUpgradeL(ls), NO_CLEANUP); CleanupStack::PopAndDestroy(&ls); return KErrNone; @@ -242,6 +253,7 @@ CleanupStack::PopAndDestroy(registry); } + /** @SYMTestCaseID APPFWK-APPARC-0104 @@ -267,71 +279,45 @@ CleanupClosePushL(fs); User::LeaveIfError(fs.Connect()); - _LIT(KImportAppsDir,"c:\\private\\10003a3f\\import\\apps\\"); - TInt err = fs.CreateDirectoryL(KImportAppsDir); TESTEL((err == KErrNone || err == KErrAlreadyExists), err); INFO_PRINTF1(_L("c:\\private\\10003a3f\\import\\apps is created successfully or already exists")); + + //Make sure that the target file does not exist. + DeleteFileL(fs, KAppRscTargetPath); - // Copy TestUpdRegAppUninstallation_reg.rsc from z:\ to c:\private\10003a3f\import\apps\. - _LIT(KAppRscSourcePath,"z:\\system\\data\\TestUpdRegAppUninstallation_reg.rsc"); - _LIT(KAppRscTargetPath,"c:\\private\\10003a3f\\import\\apps\\TestUpdRegAppUninstallation_reg.rsc"); - err = fs.CopyFileL(KAppRscSourcePath, KAppRscTargetPath); TEST(err == KErrNone); - INFO_PRINTF1(_L("Successfully copied TestUpdRegAppUninstallati on_reg.rsc from Z:\\system\\data to c:\\private\\10003a3f\\import\\apps")); + INFO_PRINTF1(_L("Successfully copied TestUpdRegAppUninstallation_reg.rsc from Z:\\system\\data to c:\\private\\10003a3f\\import\\apps")); + + //Wait till the applist is updated. + WaitForAppListUpdateL(); CServiceRegistry* registry = CServiceRegistry::NewL(); CleanupStack::PushL(registry); - //Wait till the application scanning is completed. - CTestApplistChangeObserver* obs = new(ELeave) CTestApplistChangeObserver(); - CleanupStack::PushL(obs); - CApaAppListNotifier* notif = CApaAppListNotifier::NewL(obs, CActive::EPriorityHigh); - CleanupStack::PushL(notif); - obs->iNotifier = notif; - CActiveScheduler::Start(); - INFO_PRINTF1(_L("Applicaiton scanning is completed.")); - CleanupStack::PopAndDestroy(notif); - - TUid uid1 = {0x10207f80}; + TUid appUid = {0x10207f80}; TUid resultUid={KNullUidValue}; - _LIT8(KLitMimeType,"mime/updregappuninstall"); TDataType dataType (KLitMimeType); //Test whether 0x10207f80 application is in application list. TApaAppInfo appInfo; - TEST(aLs.GetAppInfo(appInfo,uid1)==KErrNone); + TEST(aLs.GetAppInfo(appInfo,appUid)==KErrNone); //Set 0x10207f80 as default application for "mime/updregappuninstall" MIME type. - registry->SetDefault(KOpenServiceUid,dataType, uid1); + registry->SetDefault(KOpenServiceUid,dataType, appUid); registry->GetDefault(KOpenServiceUid,dataType, resultUid); - TEST(uid1==resultUid); + TEST(appUid==resultUid); - TInt fileExists = EFalse; - fs.IsFilePresent(KAppRscTargetPath, fileExists); - if (fileExists) - { - fs.ChangeFilePermissionL(KAppRscTargetPath); // clear readonly attribute inherited from z: - err = fs.DeleteFileL(KAppRscTargetPath); - if(err == KErrNone) - INFO_PRINTF1(_L("Removed file TestUpdRegAppUninstallation_reg.rsc")); - else - INFO_PRINTF1(_L("Failed to remove TestUpdRegAppUninstallation_reg.rsc")); - } - - //Wait till the application scanning is completed - notif = CApaAppListNotifier::NewL(obs, CActive::EPriorityHigh); - CleanupStack::PushL(notif); - obs->iNotifier = notif; - CActiveScheduler::Start(); - INFO_PRINTF1(_L("Applicaiton scanning is completed.")); - CleanupStack::PopAndDestroy(notif); - CleanupStack::PopAndDestroy(obs); + //Delete file c:\\private\\10003a3f\\import\\apps\\TestUpdRegAppUninstallation_reg.rsc + DeleteFileL(fs, KAppRscTargetPath); - //Check the application is removed form the application list - TEST(aLs.GetAppInfo(appInfo,uid1)==KErrNotFound); + //Wait till the application list is updated. + WaitForAppListUpdateL(); + + //Check the application is removed from the application list + TEST(aLs.GetAppInfo(appInfo,appUid)==KErrNotFound); //Check data mappings related to uninstalled applicaiton is also removed. TEST(registry->GetDefault(KOpenServiceUid,dataType, resultUid)==KErrNotFound); @@ -344,3 +330,136 @@ { CActiveScheduler::Stop(); } + +/** + @SYMTestCaseID APPFWK-APPARC-0105 + + @SYMDEF INC138417 + + @SYMTestCaseDesc Tests whether a data mapping of an applicaiton is not changed in + service registry if that applicaiton is upgraded. + + @SYMTestPriority + + @SYMTestStatus Implemented + + @SYMTestActions Inserts data mapping for an applicaion and upgrades that application with newer version. + Tests the existence of inserted data mapping in the service registry. + + @SYMTestExpectedResults Inserted data mapping is not removed from the service registry. + */ + +void CT_ServiceRegistryTestStep::TestServiceRegistryOnAppUpgradeL(RApaLsSession& aLs) + { + INFO_PRINTF1(_L("TestServiceRegistryOnAppUpgrade")); + + RSmlTestUtils fs; + CleanupClosePushL(fs); + User::LeaveIfError(fs.Connect()); + + TInt err = fs.CreateDirectoryL(KImportAppsDir); + TESTEL((err == KErrNone || err == KErrAlreadyExists), err); + INFO_PRINTF1(_L("c:\\private\\10003a3f\\import\\apps is created successfully or already exists")); + + //Make sure that the target file does not exist. + DeleteFileL(fs, KAppRscTargetPath); + + // Copy TestUpdRegAppUninstallation_reg.rsc from z:\ to c:\private\10003a3f\import\apps\. + err = fs.CopyFileL(KAppRscSourcePath, KAppRscTargetPath); + TEST(err == KErrNone); + INFO_PRINTF1(_L("Successfully copied TestUpdRegAppUninstallation_reg.rsc from Z:\\system\\data to c:\\private\\10003a3f\\import\\apps")); + + //Wait till the applist is updated. + WaitForAppListUpdateL(); + + CServiceRegistry* registry = CServiceRegistry::NewL(); + CleanupStack::PushL(registry); + + TUid appUid = {0x10207f80}; + TUid resultUid={KNullUidValue}; + TDataType dataType (KLitMimeType); + + //Test whether 0x10207f80 application is in application list. + TApaAppInfo appInfo; + TEST(aLs.GetAppInfo(appInfo,appUid)==KErrNone); + + //Set 0x10207f80 as default application for "mime/updregappuninstall" MIME type. + registry->SetDefault(KOpenServiceUid,dataType, appUid); + registry->GetDefault(KOpenServiceUid,dataType, resultUid); + TEST(appUid==resultUid); + + TDataType upgDataType(KLitUpgradeAppMimeType); + err=aLs.AppForDataType(upgDataType,resultUid); + TEST(resultUid.iUid==KNullUidValue); + + DeleteFileL(fs, KAppRscTargetPath); + + err = fs.CopyFileL(KUpgradeAppRscSourcePath, KAppRscTargetPath); + TEST(err == KErrNone); + INFO_PRINTF1(_L("Successfully copied TestUpgradeUpdRegAppUninstallation_reg.rsc from Z:\\system\\data to c:\\private\\10003a3f\\import\\apps")); + + //Change the modified time of the file to current time + RFs aFs; + TEST(aFs.Connect()==KErrNone); + TTime modifiedTime(0); + modifiedTime.HomeTime(); + TEST(aFs.SetModified(KAppRscTargetPath, modifiedTime)==KErrNone); + aFs.Close(); + + //Wait till the applist is updated. + WaitForAppListUpdateL(); + + //Check the application is not removed from the application list + TEST(aLs.GetAppInfo(appInfo,appUid)==KErrNone); + + //Check data mappings related to upgraded applicaiton is not removed. + TEST(registry->GetDefault(KOpenServiceUid,dataType, resultUid)==KErrNone); + TEST(resultUid==appUid); + + err=aLs.AppForDataType(upgDataType,resultUid); + TEST((err==KErrNone) && (resultUid==appUid)); + + DeleteFileL(fs,KAppRscTargetPath); + + CleanupStack::PopAndDestroy(registry); + CleanupStack::PopAndDestroy(&fs); + } + + +//Deletes the file if it exists. +TInt CT_ServiceRegistryTestStep::DeleteFileL(RSmlTestUtils &aFs, const TDesC &aFileName) + { + TInt fileExists = EFalse; + TInt err; + aFs.IsFilePresent(aFileName, fileExists); + if (fileExists) + { + aFs.ChangeFilePermissionL(aFileName); + err=aFs.DeleteFileL(aFileName); + if(err==KErrNone) + INFO_PRINTF2(_L("Removed file %S"), &aFileName); + else + INFO_PRINTF2(_L("Failed to remove file %S"), &aFileName); + } + else + { + err=KErrNotFound; + } + + return(err); +} + +//Wait till the application list is updated. +void CT_ServiceRegistryTestStep::WaitForAppListUpdateL() + { + CTestApplistChangeObserver* obs = new(ELeave) CTestApplistChangeObserver(); + CleanupStack::PushL(obs); + CApaAppListNotifier* notif = CApaAppListNotifier::NewL(obs, CActive::EPriorityHigh); + CleanupStack::PushL(notif); + obs->iNotifier = notif; + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(notif); + CleanupStack::PopAndDestroy(obs); + INFO_PRINTF1(_L("Applicaiton list is updated.")); + }