You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3154 8e941d3f-bd1b-0410-a28a-d453659cc2b4
709 lines
20 KiB
ObjectPascal
709 lines
20 KiB
ObjectPascal
{ This file is part of the Web Service Toolkit
|
|
Copyright (c) 2008 by Inoussa OUEDRAOGO
|
|
|
|
This file is provide under modified LGPL licence
|
|
( the files COPYING.modifiedLGPL and COPYING.LGPL).
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
}
|
|
{$INCLUDE wst_global.inc}
|
|
unit test_date_utils;
|
|
|
|
interface
|
|
uses
|
|
SysUtils,
|
|
{$IFDEF FPC}
|
|
fpcunit, testregistry,
|
|
{$ELSE}
|
|
TestFrameWork,
|
|
{$ENDIF}
|
|
test_suite_utils, date_utils;
|
|
|
|
type
|
|
|
|
{ TTest_DateUtils }
|
|
|
|
TTest_DateUtils = class(TWstBaseTest)
|
|
protected
|
|
{$IFDEF FPC}
|
|
class procedure CheckEquals(expected, actual: TTimeRec; msg: string = ''); overload;
|
|
{$ENDIF FPC}
|
|
{$IFDEF WST_DELPHI}
|
|
procedure CheckEquals(expected, actual: TTimeRec; msg: string = ''); overload;
|
|
{$ENDIF WST_DELPHI}
|
|
published
|
|
procedure xsd_TryStrToDate_date_only();
|
|
procedure xsd_TryStrToDate_date_timezone_1();
|
|
procedure xsd_TryStrToDate_date_timezone_2();
|
|
procedure xsd_TryStrToDate_date_time();
|
|
procedure xsd_TryStrToDate_date_time_fractional_second();
|
|
procedure xsd_TryStrToDate_date_time_fractional_second_2();
|
|
procedure xsd_TryStrToDate_date_bad_separator();
|
|
procedure xsd_TryStrToDate_date_time_bad_separator();
|
|
procedure xsd_TryStrToDate_date_time_timezone_z();
|
|
procedure xsd_TryStrToDate_date_time_timezone_zero();
|
|
procedure xsd_TryStrToDate_date_time_timezone_1();
|
|
procedure xsd_TryStrToDate_date_time_timezone_2();
|
|
|
|
procedure xsd_DateTimeToStr_1();
|
|
procedure xsd_DateTimeToStr_2();
|
|
procedure xsd_DateTimeToStr_fractional_second_1();
|
|
procedure xsd_DateTimeToStr_fractional_second_2();
|
|
procedure xsd_DateTimeToStr_timezone_1();
|
|
|
|
procedure xsd_TimeToStr_1();
|
|
procedure xsd_TimeToStr_zero();
|
|
procedure xsd_TimeToStr_fractional_second_1();
|
|
procedure xsd_TryStrToTime_hour_only();
|
|
procedure xsd_TryStrToTime_hour_minute_only();
|
|
procedure xsd_TryStrToTime_hour_minute_second_only();
|
|
procedure xsd_TryStrToTime_all_fields();
|
|
procedure xsd_TryStrToTime_time_timezone_1();
|
|
procedure xsd_TryStrToTime_time_timezone_2();
|
|
procedure xsd_TryStrToTime_time_timezone_3();
|
|
procedure xsd_TryStrToTime_time_timezone_4();
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TTest_DateUtils }
|
|
|
|
procedure TTest_DateUtils.xsd_DateTimeToStr_1();
|
|
const
|
|
sDATE_1 = '1976-10-12T23:34:56Z';
|
|
sDATE_2 = '0987-06-12T20:34:56Z';
|
|
var
|
|
d : TDateTimeRec;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
FillChar(d,SizeOf(d),#0);
|
|
d.Date := EncodeDate(1976,10,12) + EncodeTime(23,34,56,0);
|
|
CheckEquals(sDATE_1, xsd_DateTimeToStr(d,xdkDateTime));
|
|
|
|
FillChar(d,SizeOf(d),#0);
|
|
d.Date := EncodeDate(987,06,12) - EncodeTime(20,34,56,0);
|
|
CheckEquals(sDATE_2, xsd_DateTimeToStr(d,xdkDateTime));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_DateTimeToStr_2();
|
|
const
|
|
sDATE_1 = '1976-10-12T23:34:56Z';
|
|
sDATE_2 = '0987-06-12T20:34:56Z';
|
|
var
|
|
d : TDateTime;
|
|
begin
|
|
d := EncodeDate(1976,10,12) + EncodeTime(23,34,56,0);
|
|
CheckEquals(sDATE_1, xsd_DateTimeToStr(d,xdkDateTime));
|
|
|
|
d := EncodeDate(987,06,12) - EncodeTime(20,34,56,0);
|
|
CheckEquals(sDATE_2, xsd_DateTimeToStr(d,xdkDateTime));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_DateTimeToStr_fractional_second_1();
|
|
const
|
|
sDATE_1 = '1976-10-12T23:34:56.007Z';
|
|
sDATE_2 = '1976-10-12T23:34:56.078Z';
|
|
sDATE_3 = '1976-10-12T23:34:56.789Z';
|
|
var
|
|
d : TDateTimeRec;
|
|
begin
|
|
FillChar(d,SizeOf(d),#0);
|
|
d.Date := EncodeDate(1976,10,12) + EncodeTime(23,34,56,7);
|
|
CheckEquals(sDATE_1, xsd_DateTimeToStr(d,xdkDateTime));
|
|
|
|
FillChar(d,SizeOf(d),#0);
|
|
d.Date := EncodeDate(1976,10,12) + EncodeTime(23,34,56,78);
|
|
CheckEquals(sDATE_2, xsd_DateTimeToStr(d,xdkDateTime));
|
|
|
|
FillChar(d,SizeOf(d),#0);
|
|
d.Date := EncodeDate(1976,10,12) + EncodeTime(23,34,56,789);
|
|
CheckEquals(sDATE_3, xsd_DateTimeToStr(d,xdkDateTime));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_DateTimeToStr_fractional_second_2();
|
|
const
|
|
sDATE_1 = '1976-10-12T23:34:56.007Z';
|
|
sDATE_2 = '1976-10-12T23:34:56.078Z';
|
|
sDATE_3 = '1976-10-12T23:34:56.789Z';
|
|
var
|
|
d : TDateTime;
|
|
begin
|
|
FillChar(d,SizeOf(d),#0);
|
|
d := EncodeDate(1976,10,12) + EncodeTime(23,34,56,7);
|
|
CheckEquals(sDATE_1, xsd_DateTimeToStr(d,xdkDateTime));
|
|
|
|
FillChar(d,SizeOf(d),#0);
|
|
d := EncodeDate(1976,10,12) + EncodeTime(23,34,56,78);
|
|
CheckEquals(sDATE_2, xsd_DateTimeToStr(d,xdkDateTime));
|
|
|
|
FillChar(d,SizeOf(d),#0);
|
|
d := EncodeDate(1976,10,12) + EncodeTime(23,34,56,789);
|
|
CheckEquals(sDATE_3, xsd_DateTimeToStr(d,xdkDateTime));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_DateTimeToStr_timezone_1();
|
|
//2002-10-10T12:00:00+05:00 is 2002-10-10T07:00:00Z
|
|
var
|
|
d : TDateTimeRec;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
FillChar(d,SizeOf(d),#0);
|
|
d.Date := EncodeDate(2002,10,10) + EncodeTime(12,0,0,0);
|
|
d.HourOffset := 5;
|
|
CheckEquals('2002-10-10T07:00:00Z', xsd_DateTimeToStr(d,xdkDateTime));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TimeToStr_1();
|
|
const
|
|
sVALUE_1 = '01:23:45Z';
|
|
sVALUE_2 = '12:34:56Z';
|
|
sVALUE_3 = '20:34:56Z';
|
|
var
|
|
d : TTimeRec;
|
|
begin
|
|
//hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
d.Hour := 1;
|
|
d.Minute := 23;
|
|
d.Second := 45;
|
|
d.MilliSecond := 0;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_1, xsd_TimeToStr(d));
|
|
|
|
d.Hour := 12;
|
|
d.Minute := 34;
|
|
d.Second := 56;
|
|
d.MilliSecond := 0;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_2, xsd_TimeToStr(d));
|
|
|
|
d.Hour := 20;
|
|
d.Minute := 34;
|
|
d.Second := 56;
|
|
d.MilliSecond := 0;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_3, xsd_TimeToStr(d));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TimeToStr_zero();
|
|
const
|
|
sVALUE_1 = '00:00:00Z';
|
|
var
|
|
d : TTimeRec;
|
|
begin
|
|
//hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
d.Hour := 0;
|
|
d.Minute := 0;
|
|
d.Second := 0;
|
|
d.MilliSecond := 0;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_1, xsd_TimeToStr(d));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TimeToStr_fractional_second_1();
|
|
const
|
|
sVALUE_1 = '23:34:56.007Z';
|
|
sVALUE_2 = '23:34:56.078Z';
|
|
sVALUE_3 = '23:34:56.789Z';
|
|
var
|
|
d : TTimeRec;
|
|
begin
|
|
d.Hour := 23;
|
|
d.Minute := 34;
|
|
d.Second := 56;
|
|
d.MilliSecond := 7;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_1, xsd_TimeToStr(d));
|
|
|
|
d.Hour := 23;
|
|
d.Minute := 34;
|
|
d.Second := 56;
|
|
d.MilliSecond := 78;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_2, xsd_TimeToStr(d));
|
|
|
|
d.Hour := 23;
|
|
d.Minute := 34;
|
|
d.Second := 56;
|
|
d.MilliSecond := 789;
|
|
d.HourOffset := 0;
|
|
d.MinuteOffset := 0;
|
|
CheckEquals(sVALUE_3, xsd_TimeToStr(d));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_hour_only();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
//hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '01';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(1,0,0,0),d);
|
|
s := '05';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(5,0,0,0),d);
|
|
s := '12';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(12,0,0,0),d);
|
|
s := '13';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(13,0,0,0),d);
|
|
s := '20';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(20,0,0,0),d);
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_hour_minute_only();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
//hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '01:00';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(1,0,0,0),d);
|
|
s := '05:12';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(5,12,0,0),d);
|
|
s := '12:55';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(12,55,0,0),d);
|
|
s := '13:45';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(13,45,0,0),d);
|
|
s := '20:34';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(20,34,0,0),d);
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_hour_minute_second_only();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
//hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '01:00:00';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(1,0,0,0),d);
|
|
s := '05:12:34';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(5,12,34,0),d);
|
|
s := '12:55:56';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(12,55,56,0),d);
|
|
s := '13:45:41';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(13,45,41,0),d);
|
|
s := '20:34:12';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(20,34,12,0),d);
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_all_fields();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
//hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '01:00:00.00';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(1,0,0,0),d);
|
|
s := '05:12:34.001';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(5,12,34,1),d);
|
|
s := '12:55:56.012';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(12,55,56,12),d);
|
|
s := '13:45:41.123';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(13,45,41,123),d);
|
|
s := '20:34:12.998';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(xsd_EncodeTime(20,34,12,998),d);
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_time_timezone_1();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
s := '23:34:56+12:34';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(23,d.Hour,'Hour');
|
|
CheckEquals(34,d.Minute,'Minute');
|
|
CheckEquals(56,d.Second,'Second');
|
|
CheckEquals(0,d.MilliSecond,'MilliSecond');
|
|
CheckEquals(12,d.HourOffset,'HourOffset');
|
|
CheckEquals(34,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_time_timezone_2();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
s := '23:34:56-01:23';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(23,d.Hour,'Hour');
|
|
CheckEquals(34,d.Minute,'Minute');
|
|
CheckEquals(56,d.Second,'Second');
|
|
CheckEquals(0,d.MilliSecond,'MilliSecond');
|
|
CheckEquals(-1,d.HourOffset,'HourOffset');
|
|
CheckEquals(-23,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_time_timezone_3();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
s := '23:34:56.78+12:34';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(23,d.Hour,'Hour');
|
|
CheckEquals(34,d.Minute,'Minute');
|
|
CheckEquals(56,d.Second,'Second');
|
|
CheckEquals(78,d.MilliSecond,'MilliSecond');
|
|
CheckEquals(12,d.HourOffset,'HourOffset');
|
|
CheckEquals(34,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToTime_time_timezone_4();
|
|
var
|
|
s : string;
|
|
d : TTimeRec;
|
|
begin
|
|
s := '23:34:56.789-01:23';
|
|
Check(xsd_TryStrToTime(s,d));
|
|
CheckEquals(23,d.Hour,'Hour');
|
|
CheckEquals(34,d.Minute,'Minute');
|
|
CheckEquals(56,d.Second,'Second');
|
|
CheckEquals(789,d.MilliSecond,'MilliSecond');
|
|
CheckEquals(-1,d.HourOffset,'HourOffset');
|
|
CheckEquals(-23,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_bad_separator();
|
|
const
|
|
DATE_STR = '1976;10;12';
|
|
var
|
|
d : TDateTimeRec;
|
|
begin
|
|
CheckEquals(False,xsd_TryStrToDate(DATE_STR,d,xdkDateTime),Format('"%s" is not a valid date.',[DATE_STR]));
|
|
end;
|
|
|
|
{$IFDEF FPC}
|
|
class procedure TTest_DateUtils.CheckEquals(expected, actual: TTimeRec; msg: string);
|
|
begin
|
|
CheckEquals(expected.Hour,actual.Hour,msg + ', Hour');
|
|
CheckEquals(expected.Minute,actual.Minute,msg + ', Minute');
|
|
CheckEquals(expected.Second,actual.Second,msg + ', Second');
|
|
CheckEquals(expected.MilliSecond,actual.MilliSecond,msg + ', MilliSecond');
|
|
CheckEquals(expected.HourOffset,actual.HourOffset,msg + ', HourOffset');
|
|
CheckEquals(expected.MinuteOffset,actual.MinuteOffset,msg + ', MinuteOffset');
|
|
end;
|
|
{$ENDIF FPC}
|
|
|
|
{$IFDEF WST_DELPHI}
|
|
procedure TTest_DateUtils.CheckEquals(expected, actual: TTimeRec; msg: string);
|
|
begin
|
|
CheckEquals(expected.Hour,actual.Hour,msg + ', Hour');
|
|
CheckEquals(expected.Minute,actual.Minute,msg + ', Minute');
|
|
CheckEquals(expected.Second,actual.Second,msg + ', Second');
|
|
CheckEquals(expected.MilliSecond,actual.MilliSecond,msg + ', MilliSecond');
|
|
CheckEquals(expected.HourOffset,actual.HourOffset,msg + ', HourOffset');
|
|
CheckEquals(expected.MinuteOffset,actual.MinuteOffset,msg + ', MinuteOffset');
|
|
end;
|
|
{$ENDIF WST_DELPHI}
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_only();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(1976,y,'Year');
|
|
CheckEquals(10,m,'Month');
|
|
CheckEquals(12,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(0,hh,'Hour');
|
|
CheckEquals(0,mn,'Minute');
|
|
CheckEquals(0,ss,'Second');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
|
|
d := xsd_StrToDate(s,xdkDate);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(1976,y,'Year');
|
|
CheckEquals(10,m,'Month');
|
|
CheckEquals(12,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(0,hh,'Hour');
|
|
CheckEquals(0,mn,'Minute');
|
|
CheckEquals(0,ss,'Second');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_timezone_1();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12+11:34';
|
|
d := xsd_StrToDate(s,xdkDate);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(1976,y,'Year');
|
|
CheckEquals(10,m,'Month');
|
|
CheckEquals(12,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(0,hh,'Hour');
|
|
CheckEquals(0,mn,'Minute');
|
|
CheckEquals(0,ss,'Second');
|
|
CheckEquals(11,d.HourOffset,'HourOffset');
|
|
CheckEquals(34,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_timezone_2();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12-11:34';
|
|
d := xsd_StrToDate(s,xdkDate);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(1976,y,'Year');
|
|
CheckEquals(10,m,'Month');
|
|
CheckEquals(12,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(0,hh,'Hour');
|
|
CheckEquals(0,mn,'Minute');
|
|
CheckEquals(0,ss,'Second');
|
|
CheckEquals(-11,d.HourOffset,'HourOffset');
|
|
CheckEquals(-34,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12T23:34:56';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(1976,y,'Year');
|
|
CheckEquals(10,m,'Month');
|
|
CheckEquals(12,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(23,hh,'Hour');
|
|
CheckEquals(34,mn,'Minute');
|
|
CheckEquals(56,ss,'Second');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_bad_separator();
|
|
const
|
|
DATE_STR = '1976-10-12T23/34:56';
|
|
var
|
|
d : TDateTimeRec;
|
|
begin
|
|
CheckEquals(False,xsd_TryStrToDate(DATE_STR,d,xdkDateTime),Format('"%s" is not a valid date.',[DATE_STR]));
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_fractional_second();
|
|
|
|
procedure do_check(
|
|
const AString : string;
|
|
const AY, AM, ADY : Word;
|
|
const AHH, AMN, ASS, ASSSS : Word
|
|
);
|
|
var
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
d := xsd_StrToDate(AString,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(AY,y,'Year');
|
|
CheckEquals(AM,m,'Month');
|
|
CheckEquals(ADY,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(AHH,hh,'Hour');
|
|
CheckEquals(AMN,mn,'Minute');
|
|
CheckEquals(ASS,ss,'Second');
|
|
CheckEquals(ASSSS,ssss,'MiliSecond');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
do_check('1976-10-12T23:34:56.7', 1976,10,12, 23,34,56,700);
|
|
do_check('1976-10-12T23:34:56.07', 1976,10,12, 23,34,56,70);
|
|
do_check('1976-10-12T23:34:56.007', 1976,10,12, 23,34,56,7);
|
|
do_check('1976-10-12T23:34:56.789', 1976,10,12, 23,34,56,789);
|
|
do_check('1976-10-12T23:34:56.78', 1976,10,12, 23,34,56,780);
|
|
do_check('1976-10-12T23:34:56.078', 1976,10,12, 23,34,56,78);
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_fractional_second_2();
|
|
|
|
procedure do_check(
|
|
const AString : string;
|
|
const AY, AM, ADY : Word;
|
|
const AHH, AMN, ASS, ASSSS : Word
|
|
);
|
|
var
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
d := xsd_StrToDate(AString,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(AY,y,'Year');
|
|
CheckEquals(AM,m,'Month');
|
|
CheckEquals(ADY,dy,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(AHH,hh,'Hour');
|
|
CheckEquals(AMN,mn,'Minute');
|
|
CheckEquals(ASS,ss,'Second');
|
|
CheckEquals(ASSSS,ssss,'MiliSecond');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
do_check('1976-10-12T23:34:56.123456789', 1976,10,12, 23,34,56,123);
|
|
do_check('2010-01-04T23:43:21.569358Z', 2010,01,04, 23,43,21,569);
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_timezone_1();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12T23:34:56+12:34';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(y,1976,'Year');
|
|
CheckEquals(m,10,'Month');
|
|
CheckEquals(dy,12,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(hh,23,'Hour');
|
|
CheckEquals(mn,34,'Minute');
|
|
CheckEquals(ss,56,'Second');
|
|
CheckEquals(12,d.HourOffset,'HourOffset');
|
|
CheckEquals(34,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_timezone_2();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12T23:34:56-01:23';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(y,1976,'Year');
|
|
CheckEquals(m,10,'Month');
|
|
CheckEquals(dy,12,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(hh,23,'Hour');
|
|
CheckEquals(mn,34,'Minute');
|
|
CheckEquals(ss,56,'Second');
|
|
CheckEquals(-1,d.HourOffset,'HourOffset');
|
|
CheckEquals(-23,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_timezone_z();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12T23:34:56Z';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(y,1976,'Year');
|
|
CheckEquals(m,10,'Month');
|
|
CheckEquals(dy,12,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(hh,23,'Hour');
|
|
CheckEquals(mn,34,'Minute');
|
|
CheckEquals(ss,56,'Second');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
procedure TTest_DateUtils.xsd_TryStrToDate_date_time_timezone_zero();
|
|
var
|
|
s : string;
|
|
d : TDateTimeRec;
|
|
y,m,dy : Word;
|
|
hh,mn,ss, ssss : Word;
|
|
begin
|
|
//'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
|
|
s := '1976-10-12T23:34:56+00:00';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(y,1976,'Year');
|
|
CheckEquals(m,10,'Month');
|
|
CheckEquals(dy,12,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(hh,23,'Hour');
|
|
CheckEquals(mn,34,'Minute');
|
|
CheckEquals(ss,56,'Second');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
|
|
s := '1976-10-12T23:34:56-00:00';
|
|
d := xsd_StrToDate(s,xdkDateTime);
|
|
DecodeDate(d.Date,y,m,dy);
|
|
CheckEquals(y,1976,'Year');
|
|
CheckEquals(m,10,'Month');
|
|
CheckEquals(dy,12,'Day');
|
|
DecodeTime(d.Date,hh,mn,ss,ssss);
|
|
CheckEquals(hh,23,'Hour');
|
|
CheckEquals(mn,34,'Minute');
|
|
CheckEquals(ss,56,'Second');
|
|
CheckEquals(0,d.HourOffset,'HourOffset');
|
|
CheckEquals(0,d.MinuteOffset,'MinuteOffset');
|
|
end;
|
|
|
|
initialization
|
|
RegisterTest('Support',TTest_DateUtils.Suite);
|
|
|
|
end.
|