diff -r 000000000000 -r 2e3d3ce01487 tzservices/tzloc/test/rtest/t_localizationupdate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tzservices/tzloc/test/rtest/t_localizationupdate.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,567 @@ +// Copyright (c) 2008-2009 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: +// + + +#include +#include +#include +#include +#include +#include +#include "testserver.h" +#include + +_LIT(KDefaultLocale, "elocl.loc"); +#ifdef SYMBIAN_DISTINCT_LOCALE_MODEL +_LIT(KFrenchLocale, "elocl_lan.002"); +#else +_LIT(KFrenchLocale, "elocl.02"); +#endif +const TInt KDefaultTzId = 2592; +const TInt KDefaultCityGroupId = 1; +const TInt KParisTzId = 2656; + +_LIT(KSrcTzLocRscFile1, "z:\\timezonelocalization\\timezonegroups.r01"); +_LIT(KSrcTzLocRscFile2, "z:\\timezonelocalization\\timezonegroups.r02"); +_LIT(KSrcTzLocRscFile3, "z:\\timezonelocalization\\timezonegroups.rsc"); +_LIT(KSrcTzLocRscFile4, "z:\\timezonelocalization\\timezones.r01"); +_LIT(KSrcTzLocRscFile5, "z:\\timezonelocalization\\timezones.r02"); +_LIT(KSrcTzLocRscFile6, "z:\\timezonelocalization\\timezones.rsc"); + +_LIT(KDestTzLocRscDir, "c:\\resource\\timezonelocalization\\"); +_LIT(KDestTzLocRscFile1, "c:\\resource\\timezonelocalization\\timezonegroups.r01"); +_LIT(KDestTzLocRscFile2, "c:\\resource\\timezonelocalization\\timezonegroups.r02"); +_LIT(KDestTzLocRscFile3, "c:\\resource\\timezonelocalization\\timezonegroups.rsc"); +_LIT(KDestTzLocRscFile4, "c:\\resource\\timezonelocalization\\timezones.r01"); +_LIT(KDestTzLocRscFile5, "c:\\resource\\timezonelocalization\\timezones.r02"); +_LIT(KDestTzLocRscFile6, "c:\\resource\\timezonelocalization\\timezones.rsc"); + +_LIT(KTzLocTemporaryFile,"c:\\private\\100012a5\\DBS_2000836D_DBS_DSC.db"); +_LIT(KTzLocDb,"c:\\private\\100012a5\\DBS_10206A8B_TzLocalization.db"); + +_LIT(KSrcTzLocModifiedDir, "z:\\timezonelocalization\\modified"); + +_LIT(KSrcTzLocLocaleModifiedDir, "z:\\timezonelocalization\\locale\\"); + +_LIT(KAgendaServer,"agsvexe*"); +_LIT(KTzServer,"Tzserver*"); + +RTest test(_L("TZ Localization Resource Files Update Test Suite")); + + +LOCAL_C void CopyFilesL(RPIMTestServer& aTestServer) + { + aTestServer.CopyFileL(KSrcTzLocRscFile1,KDestTzLocRscFile1); + aTestServer.CopyFileL(KSrcTzLocRscFile2,KDestTzLocRscFile2); + aTestServer.CopyFileL(KSrcTzLocRscFile3,KDestTzLocRscFile3); + aTestServer.CopyFileL(KSrcTzLocRscFile4,KDestTzLocRscFile4); + aTestServer.CopyFileL(KSrcTzLocRscFile5,KDestTzLocRscFile5); + aTestServer.CopyFileL(KSrcTzLocRscFile6,KDestTzLocRscFile6); + } + + +LOCAL_C void DeleteFilesL(RPIMTestServer& aTestServer) + { + aTestServer.DeleteFileL(KDestTzLocRscFile1); + aTestServer.DeleteFileL(KDestTzLocRscFile2); + aTestServer.DeleteFileL(KDestTzLocRscFile3); + aTestServer.DeleteFileL(KDestTzLocRscFile4); + aTestServer.DeleteFileL(KDestTzLocRscFile5); + aTestServer.DeleteFileL(KDestTzLocRscFile6); + aTestServer.DeleteDirL(KDestTzLocRscDir); + } + +LOCAL_C void DeleteEnglishFilesL(RPIMTestServer& aTestServer) + { + aTestServer.DeleteFileL(KDestTzLocRscFile1); + aTestServer.DeleteFileL(KDestTzLocRscFile3); + aTestServer.DeleteFileL(KDestTzLocRscFile4); + aTestServer.DeleteFileL(KDestTzLocRscFile6); + aTestServer.DeleteDirL(KDestTzLocRscDir); + } + +/** +@SYMTestCaseID PIM-APPSERV-LOC-TZL-ECL-0001 + +@SYMTestCaseDesc + The purpose of this test is to verify the use of eclipsed system TZ + localization resources. + +@SYMTestActions + 1. Use the CTzLocalizer API to obtain a copy of the cities + (preUpdateCities) for a given city group identifier. + + 2. Copy system TZ localization resources that adds a city to the city group + used in action 1 to the appropriate location on the C: drive. + + 3. Use the CTzLocalizer API to obtain a copy of the cities + (postUpdateCities) for the same city group identifier used in action 1. + +@SYMTestExpectedResults + The preUpdateCities object should not contain the added city and the + postUpdateCities object should contain the added city. + +@SYMREQ + REQ9952 + +@SYMTestType + CT + +@SYMTestPriority + 1 +*/ +LOCAL_C void TestUpdatedLocalizationFilesL() + { + RPIMTestServer serv; + CleanupClosePushL(serv); + User::LeaveIfError(serv.Connect()); + + serv.CloseTzSession(); + TRAP_IGNORE(serv.KillProcessL(KAgendaServer)); + TRAP_IGNORE(serv.KillProcessL(KTzServer)); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + CTzLocalizer* localizer = CTzLocalizer::NewLC(); + // Set timezone to be London. + localizer->SetTimeZoneL(KDefaultTzId); + + CTzLocalizedCityGroup* group = localizer->GetCityGroupL(KDefaultCityGroupId); + CleanupStack::PushL(group); + CTzLocalizedCityArray* cities = localizer->GetCitiesInGroupL(*group); + CleanupStack::PushL(cities); + + TInt countDefault = cities->Count(); + test.Printf(_L("The number of cities found in a city group in the default files are %d\n"), countDefault); + + CleanupStack::PopAndDestroy(cities); + CleanupStack::PopAndDestroy(group); + CleanupStack::PopAndDestroy(localizer); + + CopyFilesL(serv); + + CTzLocalizer* localizerFlash = CTzLocalizer::NewLC(); + localizerFlash->SetTimeZoneL(KDefaultTzId); + + CTzLocalizedCityGroup* groupFlash = localizerFlash->GetCityGroupL(KDefaultCityGroupId); + CleanupStack::PushL(groupFlash); + CTzLocalizedCityArray* citiesFlash = localizerFlash->GetCitiesInGroupL(*groupFlash); + CleanupStack::PushL(citiesFlash); + TInt countFlash = citiesFlash->Count(); + + test.Printf(_L("The number of cities found in a city group in the files under system drive are %d\n"), countFlash); + __ASSERT_ALWAYS(countDefault < countFlash, User::Panic(_L("Number of cities found in the file on ROM and flash is the same"), 1)); + + CleanupStack::PopAndDestroy(citiesFlash); + CleanupStack::PopAndDestroy(groupFlash); + CleanupStack::PopAndDestroy(localizerFlash); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + + CleanupStack::PopAndDestroy(&serv); + } + +/** +@SYMTestCaseID PIM-localizationupdate-0001 + +@SYMTestCaseDesc + The purpose of this test is to verify the use of eclipsed system + TZ localization resources. + +@SYMTestActions + 1. The current locale of the system is changed to French + + 2. Fetch the number of cities in the group + + 3. Files are copied to system drive + + 4. Fetch the number of cities in the group + + 5. Delete the files on system drive + + 6. Fetch the number of cities in the group + +@SYMTestExpectedResults + Number of cities in Step 2 and 6 is 2 + + Number of cities in Step 4 is 52 + +@SYMREQ + REQ9952 +@SYMTestType + CT + +@SYMTestPriority + 1 +*/ +LOCAL_C void TestEclipsingOfRscFileL() + { + _LIT(KLocaleChangeStart, "Changing locale to French\n"); + test.Printf(KLocaleChangeStart); + + TExtendedLocale extendedLocale; + extendedLocale.LoadSystemSettings(); + TBuf<100> localeDllLocationString ; + localeDllLocationString.Copy(KFrenchLocale); + extendedLocale.LoadLocaleAspect(ELocaleLanguageSettings, localeDllLocationString) ; + extendedLocale.SaveSystemSettings(); + + RPIMTestServer serv; + CleanupClosePushL(serv); + User::LeaveIfError(serv.Connect()); + + serv.CloseTzSession(); + TRAP_IGNORE(serv.KillProcessL(KAgendaServer)); + TRAP_IGNORE(serv.KillProcessL(KTzServer)); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + CTzLocalizer* localizer = CTzLocalizer::NewLC(); + // Set timezone to be London + localizer->SetTimeZoneL(KDefaultTzId); + + // Get the default city and cities within the group + CTzLocalizedCityGroup* group = localizer->GetCityGroupL(KDefaultCityGroupId); + CleanupStack::PushL(group); + CTzLocalizedCityArray* cities = localizer->GetCitiesInGroupL(*group); + CleanupStack::PushL(cities); + + // Get the number of cities + TInt countDefault = cities->Count(); + test.Printf(_L("The number of cities found in a city group in the default files are %d\n"), countDefault); + + CleanupStack::PopAndDestroy(cities); + CleanupStack::PopAndDestroy(group); + CleanupStack::PopAndDestroy(localizer); + + // Copy files on to system drive + serv.CopyFileL(KSrcTzLocLocaleModifiedDir, KDestTzLocRscDir); + + // Get cities and city group + CTzLocalizer* localizerFlash = CTzLocalizer::NewLC(); + localizerFlash->SetTimeZoneL(KDefaultTzId); + + // Fetch cities + CTzLocalizedCityGroup* groupFlash = localizerFlash->GetCityGroupL(KDefaultCityGroupId); + CleanupStack::PushL(groupFlash); + CTzLocalizedCityArray* citiesFlash = localizerFlash->GetCitiesInGroupL(*groupFlash); + CleanupStack::PushL(citiesFlash); + + // Get the number of cities in the group + TInt countFlash = citiesFlash->Count(); + test.Printf(_L("The number of cities found in a city group in the files under system drive are %d\n"), countFlash); + + // Test whether number of cities from system drive is more than ones on ROM + test(countDefault < countFlash); + + // Cleanup + CleanupStack::PopAndDestroy(citiesFlash); + CleanupStack::PopAndDestroy(groupFlash); + CleanupStack::PopAndDestroy(localizerFlash); + + // Delete the resource files + DeleteEnglishFilesL(serv); + serv.DeleteFileL(KTzLocDb); + + // Get cities and city group + CTzLocalizer* newLocalizer = CTzLocalizer::NewLC(); + CTzLocalizedCityGroup* newGroup = newLocalizer->GetCityGroupL(KDefaultCityGroupId); + CleanupStack::PushL(newGroup); + CTzLocalizedCityArray* newCities = newLocalizer->GetCitiesInGroupL(*newGroup); + CleanupStack::PushL(newCities); + + // Get the count of cities + TInt newCount = newCities->Count(); + test.Printf(_L("The number of cities found in a city group in the files under ROM are %d\n"), newCount); + test(newCount < countFlash); + + // Cleanup + CleanupStack::PopAndDestroy(newCities); + CleanupStack::PopAndDestroy(newGroup); + CleanupStack::PopAndDestroy(newLocalizer); + CleanupStack::PopAndDestroy(&serv); + + // Revert the system locale to English + localeDllLocationString.Copy(KDefaultLocale); + TInt ret = extendedLocale.LoadLocaleAspect(ELocaleLanguageSettings, localeDllLocationString) ; + if(ret != KErrNone) + { + test.Printf(_L("Could not revert to default locale. Error code is %d"), ret); + } + extendedLocale.SaveSystemSettings(); + } + +LOCAL_C void TestImpactOfTimeZoneDeleteOnCityL() + { + RPIMTestServer serv; + CleanupClosePushL(serv); + User::LeaveIfError(serv.Connect()); + + serv.CloseTzSession(); + + TRAP_IGNORE(serv.KillProcessL(KAgendaServer)); + TRAP_IGNORE(serv.KillProcessL(KTzServer)); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + RTz tz; + CleanupClosePushL(tz); + User::LeaveIfError(tz.Connect()); + + CTzLocalizer* localizer = CTzLocalizer::NewLC(); + localizer->SetTimeZoneL(KDefaultTzId); + + _LIT(KUserCity1, "UserCity1"); + CTzLocalizedCity* city1 = localizer->AddCityL(KDefaultTzId, KUserCity1); + delete city1; + + _LIT(KUserCity2, "UserCity2"); + CTzLocalizedCity* city2 = localizer->AddCityL(KDefaultTzId, KUserCity2); + delete city2; + + _LIT(KUserCity3, "UserCity3"); + CTzLocalizedCity* city3 = localizer->AddCityL(KParisTzId, KUserCity3); + delete city3; + + //Read the number of cities + RPointerArray cityRecords; + tz.LocalizationReadCitiesL(cityRecords); + test.Printf(_L("Check if the number of cities read is correct\n")); + test(cityRecords.Count() == 3); + cityRecords.ResetAndDestroy(); + cityRecords.Close(); + CleanupStack::PopAndDestroy(localizer); + + // Copy the files that do not contain information on Paris + TRAPD(err, serv.CopyFileL(KSrcTzLocModifiedDir, KDestTzLocRscDir)); + if (err != KErrNone) + { + _LIT(KErrCopyFiles, "Couldn't copy database file\n"); + test.Printf(KErrCopyFiles); + User::Leave(err); + } + tz.SwiObsBeginL(); + tz.SwiObsFileChangedL(RTz::EFilterResourceTimezonelocalization); + tz.SwiObsEndL(); + + CTzLocalizer* newLocalizer = CTzLocalizer::NewLC(); + newLocalizer->SetTimeZoneL(KDefaultTzId); + //Read the number of cities again + RPointerArray cityRecords2; + tz.LocalizationReadCitiesL(cityRecords2); + test.Printf(_L("Again, check if the number of cities read is correct\n")); + test(cityRecords2.Count() == 2); + cityRecords2.ResetAndDestroy(); + cityRecords2.Close(); + CleanupStack::PopAndDestroy(newLocalizer); + CleanupStack::PopAndDestroy(&tz); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + CleanupStack::PopAndDestroy(&serv); + } + +LOCAL_C void TestImpactOfTimeZoneDeleteOnZoneL() + { + RPIMTestServer serv; + CleanupClosePushL(serv); + User::LeaveIfError(serv.Connect()); + + serv.CloseTzSession(); + TRAP_IGNORE(serv.KillProcessL(KAgendaServer)); + TRAP_IGNORE(serv.KillProcessL(KTzServer)); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + RTz tz; + CleanupClosePushL(tz); + User::LeaveIfError(tz.Connect()); + + CTzLocalizer* localizer = CTzLocalizer::NewLC(); + localizer->SetFrequentlyUsedZoneL(KParisTzId, CTzLocalizedTimeZone::EHomeZone); + CleanupStack::PopAndDestroy(localizer); + + // Copy the resource files that do not have Paris in them + test.Printf(_L("Copy resource files to flash drive\n")); + TRAPD(err, serv.CopyFileL(KSrcTzLocModifiedDir, KDestTzLocRscDir)); + if (err != KErrNone) + { + _LIT(KErrCopyFiles, "Couldn't copy database file\n"); + test.Printf(KErrCopyFiles); + User::Leave(err); + } + tz.SwiObsBeginL(); + tz.SwiObsFileChangedL(RTz::EFilterResourceTimezonelocalization); + tz.SwiObsEndL(); + + CTzLocalizer* newLocalizer = CTzLocalizer::NewLC(); + //Extract zone information, same city should be returned by GetFrequentlyUsedZoneCityL below. + CTzLocalizedCity* cityToCompareWith = newLocalizer->GetDefaultCityL(KDefaultTzId); + CleanupStack::PushL(cityToCompareWith); + + //Extract zone information, same zone should be returned by GetFrequentlyUsedZoneL below. + CTzLocalizedTimeZone* zoneToCompareWith = newLocalizer->GetLocalizedTimeZoneL(KDefaultTzId); + CleanupStack::PushL(zoneToCompareWith); + + CTzLocalizedCity* city = newLocalizer->GetFrequentlyUsedZoneCityL(CTzLocalizedTimeZone::EHomeZone); + test.Printf(_L("Check if the frequently used city read from the database is same as the one expected\n")); + test(city->TimeZoneId() == cityToCompareWith->TimeZoneId()); + test(city->GroupId() == cityToCompareWith->GroupId()); + test(city->Name() == cityToCompareWith->Name()); + delete city; + + CTzLocalizedTimeZone* timeZone = newLocalizer->GetFrequentlyUsedZoneL(CTzLocalizedTimeZone::EHomeZone); + test.Printf(_L("Check if the frequently used zone read from the database is same as the one expected\n")); + test(timeZone->TimeZoneId() == zoneToCompareWith->TimeZoneId()); + test(timeZone->StandardName() == zoneToCompareWith->StandardName()); + test(timeZone->ShortStandardName() == zoneToCompareWith->ShortStandardName()); + test(timeZone->DaylightName() == zoneToCompareWith->DaylightName()); + test(timeZone->ShortDaylightName() == zoneToCompareWith->ShortDaylightName()); + delete timeZone; + + CleanupStack::PopAndDestroy(2, cityToCompareWith); + CleanupStack::PopAndDestroy(newLocalizer); + CleanupStack::PopAndDestroy(&tz); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + CleanupStack::PopAndDestroy(&serv); + } + +LOCAL_C void TestImpactOfTimeZoneUpdateL() + { + RPIMTestServer serv; + CleanupClosePushL(serv); + User::LeaveIfError(serv.Connect()); + + serv.CloseTzSession(); + TRAP_IGNORE(serv.KillProcessL(KAgendaServer)); + TRAP_IGNORE(serv.KillProcessL(KTzServer)); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + + RTz tz; + CleanupClosePushL(tz); + User::LeaveIfError(tz.Connect()); + + CTzLocalizer* localizer = CTzLocalizer::NewLC(); + localizer->SetFrequentlyUsedZoneL(KDefaultTzId, CTzLocalizedTimeZone::EHomeZone); + CleanupStack::PopAndDestroy(localizer); + // Copy the resource files that have updated information for London + TRAPD(err, serv.CopyFileL(KSrcTzLocModifiedDir, KDestTzLocRscDir)); + if (err != KErrNone) + { + _LIT(KErrCopyFiles, "Couldn't copy database file\n"); + test.Printf(KErrCopyFiles); + User::Leave(err); + } + tz.SwiObsBeginL(); + tz.SwiObsFileChangedL(RTz::EFilterResourceTimezonelocalization); + tz.SwiObsEndL(); + + CTzLocalizer* newLocalizer = CTzLocalizer::NewLC(); + //Extract zone information, same city should be returned by GetFrequentlyUsedZoneCityL below. + CTzLocalizedCity* cityToCompareWith = newLocalizer->GetDefaultCityL(KDefaultTzId); + CleanupStack::PushL(cityToCompareWith); + + //Extract zone information, same zone should be returned by GetFrequentlyUsedZoneL below. + CTzLocalizedTimeZone* zoneToCompareWith = newLocalizer->GetLocalizedTimeZoneL(KDefaultTzId); + CleanupStack::PushL(zoneToCompareWith); + + CTzLocalizedCity* city = newLocalizer->GetFrequentlyUsedZoneCityL(CTzLocalizedTimeZone::EHomeZone); + test.Printf(_L("Check if the frequently used city read from the database is same as the one expected\n")); + test(city->TimeZoneId() == cityToCompareWith->TimeZoneId()); + test(city->GroupId() == cityToCompareWith->GroupId()); + test(city->Name() == cityToCompareWith->Name()); + delete city; + + CTzLocalizedTimeZone* timeZone = newLocalizer->GetFrequentlyUsedZoneL(CTzLocalizedTimeZone::EHomeZone); + test.Printf(_L("Check if the frequently used zone read from the database is same as the one expected\n")); + test(timeZone->TimeZoneId() == zoneToCompareWith->TimeZoneId()); + test(timeZone->StandardName() == zoneToCompareWith->StandardName()); + test(timeZone->ShortStandardName() == zoneToCompareWith->ShortStandardName()); + test(timeZone->DaylightName() == zoneToCompareWith->DaylightName()); + test(timeZone->ShortDaylightName() == zoneToCompareWith->ShortDaylightName()); + delete timeZone; + CleanupStack::PopAndDestroy(2, cityToCompareWith); + CleanupStack::PopAndDestroy(newLocalizer); + CleanupStack::PopAndDestroy(&tz); + + DeleteFilesL(serv); + serv.DeleteDirL(KDestTzLocRscDir); + serv.DeleteFileL(KTzLocDb); + serv.DeleteFileL(KTzLocTemporaryFile); + + CleanupStack::PopAndDestroy(&serv); + } + +LOCAL_C void DoTestsL() + { + test.Title(); + + + test.Start(_L(" @SYMTestCaseID PIM-APPSERV-LOC-TZL-ECL-0001 Test Updated Localization Files")); + TestUpdatedLocalizationFilesL(); + + test.Next(_L(" @SYMTestCaseID PIM-localizationupdate-0001 Test Eclipsing of Files with locale changes")); + TestEclipsingOfRscFileL(); + + + test.Next(_L("Test the impact of deleting time zone id on user cities table")); + TestImpactOfTimeZoneDeleteOnCityL(); + + test.Next(_L("Test the impact of deleting time zone id on frequently used zone table")); + TestImpactOfTimeZoneDeleteOnZoneL(); + + test.Next(_L("Test the impact of updating time zone id on frequently used zone table")); + TestImpactOfTimeZoneUpdateL(); + + test.End(); + } + + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + + CTrapCleanup* cleanup = CTrapCleanup::New(); + + TRAPD(ret, DoTestsL()); + test.Printf(_L("Trapped return value from DoTestsL(): %d\n"), ret); + test(ret == KErrNone); + + delete cleanup; + + test.Close(); + + __UHEAP_MARKEND; + + return KErrNone; + }