diff -r 000000000000 -r a41df078684a kerneltest/e32test/datetime/t_tparse.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/datetime/t_tparse.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,1021 @@ +// Copyright (c) 1996-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" +// 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: +// e32test\datetime\t_tparse.cpp +// Overview: +// Date & time tests +// API Information: +// TTime, TDateTime +// Details: +// - Set various locale settings to known values. +// - Test parsing a variety of simple time formats. Verify results are as expected. +// - Test parsing a variety of simple date formats. Verify results are as expected. +// - Test parsing a variety of date and time formats. Verify results are as expected. +// - Attempt to parse a variety of bad date and time descriptors. Verify the error +// results are as expected. +// - Test a variety of date and time locale changes. Verify results are as expected. +// Platforms/Drives/Compatibility: +// All. +// Assumptions/Requirement/Pre-requisites: +// Failures and causes: +// Base Port information: +// +// + +#include + +RTest test(_L("T_TPARSE")); + +LOCAL_C TInt DateTimeParse(TDateTime& aDateTime,const TDesC& aDes,TInt aCenturyOffset=0) + { + + TTime time; + TInt r=time.Parse(aDes,aCenturyOffset); + if (r>=0) + aDateTime=time.DateTime(); + return r; + } + +LOCAL_D void SimpleTimeFormats() + { + + TInt error; + TDateTime dateTime; + error=DateTimeParse(dateTime,_L("23:34:45:56")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==45); + test(dateTime.MicroSecond()==56); + + error=DateTimeParse(dateTime,_L("23:34:45.56")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==45); + test(dateTime.MicroSecond()==56); + + error=DateTimeParse(dateTime,_L("23:34:45.1234567")); + test(error==KErrGeneral); + + error=DateTimeParse(dateTime,_L("23:34:45")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==45); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("00023:00034")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==00); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("23: 34")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==0); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("23: 34am")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==0); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("23: 34AM")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==0); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L(" 23 : 34 ")); + test(error==EParseTimePresent); + test(dateTime.Hour()==23); + test(dateTime.Minute()==34); + test(dateTime.Second()==0); + test(dateTime.MicroSecond()==0); + + DateTimeParse(dateTime,_L("12 . 34")); + test(dateTime.Hour()==12); + test(dateTime.Minute()==34); + + error=DateTimeParse(dateTime,_L("23:34:")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L(" 0012 : 00034 . 056")); + test(error==EParseTimePresent); + test(dateTime.Hour()==12); + test(dateTime.Minute()==34); + test(dateTime.Second()==56); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("24 : 56")); + test(error==KErrGeneral);// TDateTime class does not allow 24:56 + + error=DateTimeParse(dateTime,_L("10")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("10a")); + test(error==EParseTimePresent); + test(dateTime.Hour()==10); + + error=DateTimeParse(dateTime,_L("10p")); + test(error==EParseTimePresent); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("10 p")); + test(error==EParseTimePresent); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("10pm ")); + test(error==EParseTimePresent); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("10 pm")); + test(error==EParseTimePresent); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("10 AM")); + test(error==EParseTimePresent); + test(dateTime.Hour()==10); + + error=DateTimeParse(dateTime,_L("10 PM")); + test(error==EParseTimePresent); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("10pmERROR")); + test(error==KErrArgument); + + DateTimeParse(dateTime,_L("12 : 56 pm")); + test(dateTime.Hour()==12); + test(dateTime.Minute()==56); + + DateTimeParse(dateTime,_L("12 : 56 am ")); + test(dateTime.Hour()==0); + test(dateTime.Minute()==56); + + DateTimeParse(dateTime,_L("12.34.56am")); + test(dateTime.Hour()==0); + test(dateTime.Minute()==34); + test(dateTime.Second()==56); + + DateTimeParse(dateTime,_L("12.34.56pm ")); + test(dateTime.Hour()==12); + test(dateTime.Minute()==34); + test(dateTime.Second()==56); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("12:34:56am ERROR")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("12 : 56 am 05/jan/1996 ")); + test(error==(EParseTimePresent|EParseDatePresent)); + test(dateTime.Hour()==0); + test(dateTime.Minute()==56); + } + +LOCAL_D void SimpleDateFormats() + { + TDateTime before2000DateTime(1999,EJanuary,0,0,0,0,0); + TDateTime after2000DateTime(2001,EJanuary,0,0,0,0,0); + TTime before2000(before2000DateTime); + TTime after2000(after2000DateTime); + + for (TInt ii=0;ii<=1;ii++) + { + TBool currentTimeIsBeforeYear2000=ETrue; + if (ii==0) + { + User::SetUTCTime(before2000); + currentTimeIsBeforeYear2000=ETrue; + } + else if (ii==1) + { + User::SetUTCTime(after2000); + currentTimeIsBeforeYear2000=EFalse; + } + TInt error; + TDateTime dateTime; + DateTimeParse(dateTime,_L("5/6/1996")); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + + DateTimeParse(dateTime,_L("5-6,1996")); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + + DateTimeParse(dateTime,_L("5 6 1996")); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + + DateTimeParse(dateTime,_L("5 ; 6 1996")); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + + + DateTimeParse(dateTime,_L("5 / 6, 96 ")); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1996); + else + test(dateTime.Year()==2096); + + DateTimeParse(dateTime,_L("5/6/19 "),20); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==2019); + + DateTimeParse(dateTime,_L("5/6/20 "),20); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1920); + + DateTimeParse(dateTime,_L("5/6/00"),20); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==2000); + + error=DateTimeParse(dateTime,_L("5/6/00 "),00); + test(error==EParseDatePresent); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1900); + else + test(dateTime.Year()==2000); + + error=DateTimeParse(dateTime,_L("june 5 /00 "),00); + test(error==EParseDatePresent); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1900); + else + test(dateTime.Year()==2000); + + error=DateTimeParse(dateTime,_L("5 june/00 "),00); + test(error==EParseDatePresent); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1900); + else + test(dateTime.Year()==2000); + + error=DateTimeParse(dateTime,_L("5june 96 "),00); + test(error==KErrArgument); + + // two field dates + + error=DateTimeParse(dateTime,_L("5/6")); + test(error==EParseDatePresent); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + + error=DateTimeParse(dateTime,_L("5-6,")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("5/6/ "),20); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("july 11"),20); + test(error==EParseDatePresent); + test(dateTime.Day()==10); + test(dateTime.Month()==EJuly); + test(dateTime.Year()==0); + + error=DateTimeParse(dateTime,_L("11 july"),20); + test(error==EParseDatePresent); + test(dateTime.Day()==10); + test(dateTime.Month()==EJuly); + test(dateTime.Year()==0); + + error=DateTimeParse(dateTime,_L("june 5 "),00); + test(error==EParseDatePresent); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + + error=DateTimeParse(dateTime,_L("5 june/ "),00); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("5june "),00); + test(error==KErrArgument); + + DateTimeParse(dateTime,_L("5/6/1")); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + DateTimeParse(dateTime,_L("5/6/01")); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + DateTimeParse(dateTime,_L("5/6/001")); + test(dateTime.Year()==0001); + DateTimeParse(dateTime,_L("5/6/0001")); + test(dateTime.Year()==0001); + } + } + +LOCAL_D void DateTimeFormats() + { + TDateTime before2000DateTime(1999,EJanuary,0,0,0,0,0); + TDateTime after2000DateTime(2001,EJanuary,0,0,0,0,0); + TTime before2000(before2000DateTime); + TTime after2000(after2000DateTime); + + for (TInt ii=0;ii<=1;ii++) + { + TBool currentTimeIsBeforeYear2000=ETrue; + if (ii==0) + { + User::SetUTCTime(before2000); + currentTimeIsBeforeYear2000=ETrue; + } + else if (ii==1) + { + User::SetUTCTime(after2000); + currentTimeIsBeforeYear2000=EFalse; + } + TInt error; + TDateTime dateTime; + error=DateTimeParse(dateTime,_L("5/6/1996 10am")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==10); + + error=DateTimeParse(dateTime,_L("5/6/1996 10 pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("5/6/1996 10 : 30 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==10); + test(dateTime.Minute()==30); + + error=DateTimeParse(dateTime,_L("5/6/1996 10 : 40 pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==22); + test(dateTime.Minute()==40); + + error=DateTimeParse(dateTime,_L("5/6/1996 10 : 40 . 01 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==10); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("5-6 ,1996 10 : 40 . 01 pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==22); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("20- feb /96 12 : 40 . 01 am")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==19); + test(dateTime.Month()==EFebruary); + test(dateTime.Hour()==0); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==0); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1996); + else + test(dateTime.Year()==2096); + + error=DateTimeParse(dateTime,_L("5/6/1996 10 : 40 . 01 . 02 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==10); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==2); + + error=DateTimeParse(dateTime,_L("5-6 ,1996 10 : 40 . 01 . 03 pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==1996); + test(dateTime.Hour()==22); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==3); + + error=DateTimeParse(dateTime,_L("20- feb /96 12 : 40 . 01 . 04 am")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==19); + test(dateTime.Month()==EFebruary); + test(dateTime.Hour()==0); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==4); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1996); + else + test(dateTime.Year()==2096); + + error=DateTimeParse(dateTime,_L("20- feb /9612 : 40.01am")); + test(error==KErrGeneral); + + // two field dates + + error=DateTimeParse(dateTime,_L("5/6 10am")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + test(dateTime.Hour()==10); + + error=DateTimeParse(dateTime,_L("5/6/ 10 pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + test(dateTime.Hour()==22); + + error=DateTimeParse(dateTime,_L("5/6 10 : 40 . 01 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + test(dateTime.Hour()==10); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("5-6 , 10 : 40 . 01 pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + test(dateTime.Hour()==22); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==0); + + error=DateTimeParse(dateTime,_L("5/6 10 : 40 . 01 . 02")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + test(dateTime.Hour()==10); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==2); + + error=DateTimeParse(dateTime,_L("5-6 , 10 : 40 . 01 . 05pm ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + test(dateTime.Year()==0); + test(dateTime.Hour()==22); + test(dateTime.Minute()==40); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==5); + + } + } + +LOCAL_D void TimeDateFormats() + { + TDateTime before2000DateTime(1999,EJanuary,0,0,0,0,0); + TDateTime after2000DateTime(2001,EJanuary,0,0,0,0,0); + TTime before2000(before2000DateTime); + TTime after2000(after2000DateTime); + + for (TInt ii=0;ii<=1;ii++) + { + TBool currentTimeIsBeforeYear2000=ETrue; + if (ii==0) + { + User::SetUTCTime(before2000); + currentTimeIsBeforeYear2000=ETrue; + } + else if (ii==1) + { + User::SetUTCTime(after2000); + currentTimeIsBeforeYear2000=EFalse; + } + TInt error; + TDateTime dateTime; + error=DateTimeParse(dateTime,_L("10pm 5/6/96")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Hour()==22); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1996); + else + test(dateTime.Year()==2096); + + + error=DateTimeParse(dateTime,_L("12 am 5 -feb,03 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Hour()==00); + test(dateTime.Day()==4); + test(dateTime.Month()==EFebruary); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1903); + else + test(dateTime.Year()==2003); + + error=DateTimeParse(dateTime,_L("12 .56am 5 -feb,03 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Hour()==00); + test(dateTime.Minute()==56); + test(dateTime.Day()==4); + test(dateTime.Month()==EFebruary); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1903); + else + test(dateTime.Year()==2003); + + error=DateTimeParse(dateTime,_L("12 .56:01.03pm 5 -SEPTEMBER,03 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Hour()==12); + test(dateTime.Minute()==56); + test(dateTime.Second()==01); + test(dateTime.MicroSecond()==03); + test(dateTime.Day()==4); + test(dateTime.Month()==ESeptember); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1903); + else + test(dateTime.Year()==2003); + + + error=DateTimeParse(dateTime,_L("12 .56:01pm SEPTEMBER 5,03 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Hour()==12); + test(dateTime.Minute()==56); + test(dateTime.Second()==01); + test(dateTime.Day()==4); + test(dateTime.Month()==ESeptember); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1903); + else + test(dateTime.Year()==2003); + + + error=DateTimeParse(dateTime,_L("12 .0056:01pm 5 -SEPTEMBERX,03 ")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("12 .56:015 -SEPTEMBER,03 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Hour()==12); + test(dateTime.Minute()==56); + test(dateTime.Second()==15); + test(dateTime.Day()==2); + test(dateTime.Month()==ESeptember); + test(dateTime.Year()==0); + + // max descriptor length 27 tokens// 13 tokens after spaces are striped + error=DateTimeParse(dateTime,_L(" 10 : 00 : 00 . 123456 pm 5 / 6 / 96 ")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.MicroSecond()==123456); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==22); + test(dateTime.Day()==4); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1996); + else + test(dateTime.Year()==2096); + + + // the formaula array will overflow with too many tokens + error=DateTimeParse(dateTime,_L(" 10 : 00 : 00 pm 5 / 6 / 96 / / / / / / / / / / / / / / / ")); + test(error==KErrArgument); + } + } + +LOCAL_D void BadDescriptors() + { + + TInt error; + TDateTime dateTime; + error=DateTimeParse(dateTime,_L("10pmpm")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("10pmX")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("1111")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("10::10")); + test(error==KErrGeneral); + + error=DateTimeParse(dateTime,_L("10-,10")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L(" - 10:10")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L(" 10 10:10")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L(" 5 june 10000")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("24:01")); + test(error==KErrGeneral); + + error=DateTimeParse(dateTime,_L("may 2, 9623:34:45")); + test(error==KErrGeneral); + + error=DateTimeParse(dateTime,_L(" 9/10/- ")); + test(error==KErrArgument); + } + +LOCAL_D void TestLocaleChanges() + { + TDateTime before2000DateTime(1999,EJanuary,0,0,0,0,0); + TDateTime after2000DateTime(2001,EJanuary,0,0,0,0,0); + TTime before2000(before2000DateTime); + TTime after2000(after2000DateTime); + + for (TInt ii=0;ii<=1;ii++) + { + TBool currentTimeIsBeforeYear2000=ETrue; + if (ii==0) + { + User::SetUTCTime(before2000); + currentTimeIsBeforeYear2000=ETrue; + } + else if (ii==1) + { + User::SetUTCTime(after2000); + currentTimeIsBeforeYear2000=EFalse; + } + TLocale locale; + locale.Refresh(); + TLocale savedLocale; + TInt error; + TDateTime dateTime; + + //Set decimal separator in locale to another value: + locale.SetDecimalSeparator('!'); + locale.Set(); + error=DateTimeParse(dateTime,_L("3/6 10:10:10!111111")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.MicroSecond()==111111); + test(dateTime.Second()==10); + test(dateTime.Minute()==10); + test(dateTime.Hour()==10); + test(dateTime.Day()==2); + test(dateTime.Month()==EJune); + + error=DateTimeParse(dateTime,_L("1/6/12")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==0); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1912); + else + test(dateTime.Year()==2012); + + error=DateTimeParse(dateTime,_L(" dec 3 12"),10); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==2); + test(dateTime.Month()==EDecember); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1912); + else + test(dateTime.Year()==1912); + + error=DateTimeParse(dateTime,_L(" 3 dec 12 "),12); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==2); + test(dateTime.Month()==EDecember); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1912); + else + test(dateTime.Year()==1912); + + TDateFormat dateFormat=EDateAmerican; + locale.SetDateFormat(dateFormat); + locale.Set(); + + error=DateTimeParse(dateTime,_L("1/6/12")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==5); + test(dateTime.Month()==EJanuary); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1912); + else + test(dateTime.Year()==2012); + + error=DateTimeParse(dateTime,_L(" dec 3 12"),13); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==2); + test(dateTime.Month()==EDecember); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==2012); + else + test(dateTime.Year()==2012); + + error=DateTimeParse(dateTime,_L(" 3 dec 12 ")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==2); + test(dateTime.Month()==EDecember); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1912); + else + test(dateTime.Year()==2012); + + dateFormat=EDateJapanese; + locale.SetDateFormat(dateFormat); + locale.Set(); + + error=DateTimeParse(dateTime,_L("3/17")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==16); + test(dateTime.Month()==EMarch); + test(dateTime.Year()==0); + + error=DateTimeParse(dateTime,_L("1/6/12")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==11); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + + error=DateTimeParse(dateTime,_L("1*6*12")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("1+6+12")); + test(error==KErrArgument); + + locale.SetDateSeparator('*',1); + locale.SetDateSeparator('+',2); + locale.Set(); + + error=DateTimeParse(dateTime,_L("1*6*12")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==11); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + + error=DateTimeParse(dateTime,_L("1+6+12")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==11); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + + error=DateTimeParse(dateTime,_L("1+6+12 14:32.54am")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Second()==54); + test(dateTime.Minute()==32); + test(dateTime.Hour()==14); + test(dateTime.Day()==11); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + + error=DateTimeParse(dateTime,_L("10p 1+6+12")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==22); + test(dateTime.Day()==11); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1901); + else + test(dateTime.Year()==2001); + + // European + locale.SetDateFormat(EDateEuropean); + locale.SetDateSeparator('.',2); + locale.Set(); + + error=DateTimeParse(dateTime,_L("1+6+12")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L("3.6.86")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==2); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1986); + else + test(dateTime.Year()==2086); + + error=DateTimeParse(dateTime,_L("3.6.86 10:10:10")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Second()==10); + test(dateTime.Minute()==10); + test(dateTime.Hour()==10); + test(dateTime.Day()==2); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1986); + else + test(dateTime.Year()==2086); + + locale.SetDateSeparator(':',1); + locale.Set(); + + error=DateTimeParse(dateTime,_L("3.6.86 10:10:10")); + test(error==KErrArgument); +// test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Second()==10); + test(dateTime.Minute()==10); + test(dateTime.Hour()==10); + test(dateTime.Day()==2); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1986); + else + test(dateTime.Year()==2086); + + error=DateTimeParse(dateTime,_L("3:6:86 10.10.10")); + test(error==KErrArgument); + test(dateTime.Second()==10); + test(dateTime.Minute()==10); + test(dateTime.Hour()==10); + test(dateTime.Day()==2); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1986); + else + test(dateTime.Year()==2086); + + error=DateTimeParse(dateTime,_L("10.10")); + test(error==EParseDatePresent); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==9); + test(dateTime.Month()==EOctober); + test(dateTime.Year()==0); + + // If the date sep has been set to '.' then 10th October + error=DateTimeParse(dateTime,_L("10.10pm")); + test(error==KErrArgument); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==0); + test(dateTime.Day()==9); + test(dateTime.Month()==EOctober); + test(dateTime.Year()==0); + + error=DateTimeParse(dateTime,_L("10p 3:6:86")); + test(error==(EParseDatePresent|EParseTimePresent)); + test(dateTime.Second()==0); + test(dateTime.Minute()==0); + test(dateTime.Hour()==22); + test(dateTime.Day()==2); + test(dateTime.Month()==EJune); + if (currentTimeIsBeforeYear2000) + test(dateTime.Year()==1986); + else + test(dateTime.Year()==2086); + + error=DateTimeParse(dateTime,_L("1:6:12 3.05.06")); + test(error==KErrArgument); + + error=DateTimeParse(dateTime,_L(" 3.05.06 1:6:12")); + test(error==KErrArgument); + + locale.Refresh(); + savedLocale.Set(); + } + } + +TInt E32Main() + { + + test.Title(); + test.Start(_L("Begin tests")); + TLocale currentLocale; + + TLocale b; + b.SetDateSeparator('\0',0); + b.SetDateSeparator('/',1); + b.SetDateSeparator('/',2); + b.SetDateSeparator('\0',3); + b.SetDateFormat(EDateEuropean); + b.SetTimeFormat(ETime12); + b.SetTimeSeparator('\0',0); + b.SetTimeSeparator(':',1); + b.SetTimeSeparator(':',2); + b.SetTimeSeparator('\0',3); + b.SetAmPmSpaceBetween(ETrue); + b.SetAmPmSymbolPosition(ELocaleAfter); + b.SetWorkDays(0x1F); + b.SetStartOfWeek(EMonday); + b.Set(); + + TTimeIntervalSeconds oldOffset = User::UTCOffset(); + User::SetUTCOffset(0); + + test.Console()->Printf(_L("SimpleTimeFormats\n")); + SimpleTimeFormats(); + test.Console()->Printf(_L("SimpleDateFormats\n")); + SimpleDateFormats(); + test.Console()->Printf(_L("DateTimeFormats\n")); + DateTimeFormats(); + test.Console()->Printf(_L("TimeDateFormats\n")); + TimeDateFormats(); + test.Console()->Printf(_L("BadDescriptors\n")); + BadDescriptors(); + test.Console()->Printf(_L("TestLocaleChanges\n")); + TestLocaleChanges(); + test.Console()->Printf(_L("End of tests\n")); + currentLocale.Set(); + User::SetUTCOffset(oldOffset); + test.End(); + return(KErrNone); + } + +