void CTzUserDataTest::UpdateCurrentTzL(RTz& aTz,TInt aOldOffSet, TInt aNewOffSet ) { CTzRules* newrules = CreateUserDefinedTzLC(aOldOffSet, aNewOffSet); CTzUserNames* newnames = CreateUserDefinedTzNamesLC(); CTzId* currentTzid = aTz.GetTimeZoneIdL(); CleanupStack::PushL(currentTzid); iUserData->UpdateL(*currentTzid,*newrules, *newnames); CleanupStack::PopAndDestroy(currentTzid); CTzRules* currentRules = aTz.GetTimeZoneRulesL(0, 9999,ETzUtcTimeReference ); CleanupStack::PushL(currentRules); test(newrules->IsEqualTo(*currentRules)); CleanupStack::PopAndDestroy(3, newrules); }
void CTzUserDataTest::CachedUserTimeZoneL(RTz& aRTz, TTest aWhatToTest) { test.Next(_L("Conver times - Server Response to Changes")); TInt offset = 60; TTime utctime (TDateTime(2000, EMay, 0, 0, 0, 0, 0)); //Convert a given time from UTC to local time using the user-defined time zone TTime localtime = utctime ; CreateUserTzAndSetCurrentTimeToL(aRTz, offset, offset); aRTz.ConvertToLocalTime(localtime); TTimeIntervalMinutes minutes; localtime.MinutesFrom(utctime, minutes); test (minutes == TTimeIntervalMinutes(offset)); localtime = utctime; //Convert a given time from UTC to local time when the corrent tz rule is updated if(aWhatToTest==EUpdateCachedTz) { offset = 120; UpdateCurrentTzL(aRTz, offset, offset); } else if(aWhatToTest==EDeleteCachedTz) { //Delete the current tz rule which result in system time reverting to the default time zone. DeleteCurrentTzL(aRTz); //Convert a given time from UTC to local time using an existing time zone which is the defaut time zone. CTzRules* currentRules = aRTz.GetTimeZoneRulesL(0, 9999,ETzUtcTimeReference ); CleanupStack::PushL(currentRules); offset = currentRules->GetOffsetL(utctime, ETzUtcTimeReference); CleanupStack::PopAndDestroy(currentRules); } aRTz.ConvertToLocalTime(localtime); localtime.MinutesFrom(utctime, minutes); test (minutes == TTimeIntervalMinutes(offset)); }
void CTzUserDataTest::CreateUserTzBasedOnShanghaiRuleL(RTz& aRTz, TTest aWhatToTest) { _LIT8(KTimeNone, "Asia/Shanghai"); CTzId* shanghaiId = CTzId::NewL(KTimeNone()); CleanupStack::PushL(shanghaiId); CTzRules* shanghaiRule = aRTz.GetTimeZoneRulesL(*shanghaiId, 0, 9999, ETzUtcTimeReference); CleanupStack::PopAndDestroy(shanghaiId); // Last rule: 00:00:000 Date:1/01/1987 Time: 23:59:59:000 Date:31/12/1991 Old=480 New=540 Ch=0 TTime dston (TDateTime(2010, EMarch, 0, 0, 0, 0, 0)); TTime dstoff (TDateTime(2010, ESeptember, 0, 0, 0, 0, 0)); TMonth monthOn = dston.DateTime().Month(); TInt dayOn = dston.DateTime().Day(); TMonth monthOff = dstoff.DateTime().Month(); TInt dayOff = dstoff.DateTime().Day(); test.Next(_L("Test Creation user-defined time zone based on Shanghai rules")); TTzRule dstOn(2010, 9999, 480, 540, monthOn, ETzFixedDate, dayOn, 0, ETzWallTimeReference, 120); TTzRule dstOff (2010, 9999, 540, 480, monthOff, ETzFixedDate, dayOff, 0, ETzWallTimeReference, 120); CleanupStack::PushL(shanghaiRule); shanghaiRule->AddRuleL(dstOff);//add the new rule which have DST shanghaiRule->AddRuleL(dstOn); CTzUserNames* newRuleNames = CreateUserDefinedTzNamesLC(); CTzId* id = iUserData->CreateL(*shanghaiRule, *newRuleNames); CleanupStack::PushL(id); iTzIds.AppendL(id); CleanupStack::Pop(id); CheckTimeZoneL(*id, *shanghaiRule, *newRuleNames); // Check UTC offset and DST. RArray<TTime> timesOn; CleanupClosePushL(timesOn); RArray<TTime> timesOff; CleanupClosePushL(timesOff); TTime check = TDateTime(1998, ESeptember, 0, 3, 0, 0, 0); timesOff.AppendL(check); check = TDateTime(2005, ESeptember, 0, 3, 0, 0, 0); timesOff.AppendL(check); check = TDateTime(2020, ESeptember, 0, 3, 0, 0, 0); timesOff.AppendL(check); check = TDateTime(2011, EAugust, 0, 0, 0, 0, 0); timesOn.AppendL(check); check = TDateTime(2015, EAugust, 0, 0, 0, 0, 0); timesOn.AppendL(check); check = TDateTime(2020, EAugust, 0, 0, 0, 0, 0); timesOn.AppendL(check); if(aWhatToTest==ETimeConversion) { TestUtcOffsetL(*id,*shanghaiRule, timesOn, 540, aRTz); TestUtcOffsetL(*id,*shanghaiRule, timesOff, 480, aRTz); } else if(aWhatToTest==EDayLightSave) { TestDaylightSavingStateL(*id, timesOn, ETrue, aRTz); TestDaylightSavingStateL(*id, timesOff, EFalse, aRTz); } CleanupStack::PopAndDestroy(4, shanghaiRule); }
void CTzUserDataTest::CreateUserTzBasedOnLondonRuleL(RTz& aRTz, TTest aWhatToTest) { test.Next(_L("Test Creation user-defined time zone based on London rules")); //create a new rule which doesn't have DST saving. TTime start (TDateTime(2010, ESeptember, 0, 0, 0, 0, 0)); TInt year = start.DateTime().Year(); TMonth month = start.DateTime().Month(); TInt day = start.DateTime().Day(); TTzRule newrule(year, 9999, 0, 0, month, ETzFixedDate, day, 0, ETzWallTimeReference, 120); //Get the existing london rule _LIT8(KTimeNone, "Europe/London"); CTzId* londonId = CTzId::NewL(KTimeNone()); CleanupStack::PushL(londonId); CTzRules* userrule = aRTz.GetTimeZoneRulesL(*londonId, 0, 9999, ETzUtcTimeReference); CleanupStack::PopAndDestroy(londonId); //Use London rule to create a new user-defined rule TInt count = userrule->Count(); //Since the last two rules (TTzRule objects one for summer rule one for winter rule) in existing database covers the years in which a new rule starts. //The client has to amend the ending years of those two rules before adding a new rule. //We set the ending year for last two rules to 2009 since the new rule starts on 2010 TTzRule lastRule = (*userrule)[count-1]; TDateTime dateTimeLast = lastRule.iTo.iTime.DateTime(); dateTimeLast.SetYear(2009); lastRule.iTo.iTime = dateTimeLast; TTzRule lastSecondRule = (*userrule)[count-2]; TDateTime dateTimeLastSecond = lastSecondRule.iTo.iTime.DateTime(); dateTimeLastSecond.SetYear(2009); lastSecondRule.iTo.iTime = dateTimeLastSecond; CleanupStack::PushL(userrule); //Remove last two existing rules userrule->RemoveRule(count-1); userrule->RemoveRule(count-2); //Add two rules whoes ending years have been amended userrule->AddRuleL(lastRule); userrule->AddRuleL(lastSecondRule); //Add the new rule userrule->AddRuleL(newrule); //userrule->AddRuleL(newrule);//add the new rule which doesn't have DST CTzUserNames* newRuleNames = CreateUserDefinedTzNamesLC(); CTzId* id = iUserData->CreateL(*userrule, *newRuleNames); CleanupStack::PushL(id); iTzIds.AppendL(id); CleanupStack::Pop(id); CheckTimeZoneL(*id, *userrule, *newRuleNames); CleanupStack::PopAndDestroy(newRuleNames); RArray<TTime> timesOn; CleanupClosePushL(timesOn); RArray<TTime> timesOff; CleanupClosePushL(timesOff); // Check UTC offset and DST. TTime check = TDateTime(1998, ESeptember, 0, 0, 0, 0, 0); timesOn.AppendL(check); check = TDateTime(2005, ESeptember, 0, 0, 0, 0, 0); timesOn.AppendL(check); check = TDateTime(2009, ESeptember, 0, 0, 0, 0, 0); timesOn.AppendL(check); check = TDateTime(2010, ESeptember, 0, 3, 0, 0, 0); timesOff.AppendL(check); check = TDateTime(2015, ESeptember, 0, 3, 0, 0, 0); timesOff.AppendL(check); check = TDateTime(2020, ESeptember, 0, 3, 0, 0, 0); timesOff.AppendL(check); if(aWhatToTest==ETimeConversion) { TestUtcOffsetL(*id,*userrule, timesOn, 60, aRTz); TestUtcOffsetL(*id,*userrule, timesOff, 0, aRTz); } else if(aWhatToTest==EDayLightSave) { TestDaylightSavingStateL(*id, timesOn, ETrue, aRTz); TestDaylightSavingStateL(*id, timesOff, EFalse, aRTz); } CleanupStack::PopAndDestroy(3, userrule); }