You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@609 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
256
wst/trunk/tests/test_suite/test_date_utils.pas
Normal file
256
wst/trunk/tests/test_suite/test_date_utils.pas
Normal file
@ -0,0 +1,256 @@
|
||||
{ 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}
|
||||
date_utils;
|
||||
|
||||
type
|
||||
|
||||
TTest_DateUtils = class(TTestCase)
|
||||
published
|
||||
procedure xsd_TryStrToDate_date_only();
|
||||
procedure xsd_TryStrToDate_date_time();
|
||||
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_timezone_1();
|
||||
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));
|
||||
|
||||
FillChar(d,SizeOf(d),#0);
|
||||
d.Date := EncodeDate(987,06,12) - EncodeTime(20,34,56,0);
|
||||
CheckEquals(sDATE_2, xsd_DateTimeToStr(d));
|
||||
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));
|
||||
|
||||
d := EncodeDate(987,06,12) - EncodeTime(20,34,56,0);
|
||||
CheckEquals(sDATE_2, xsd_DateTimeToStr(d));
|
||||
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));
|
||||
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),Format('"%s" is not a valid date.',[DATE_STR]));
|
||||
end;
|
||||
|
||||
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);
|
||||
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,0,'Hour');
|
||||
CheckEquals(mn,0,'Minute');
|
||||
CheckEquals(ss,0,'Second');
|
||||
CheckEquals(0,d.HourOffset,'HourOffset');
|
||||
CheckEquals(0,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);
|
||||
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_bad_separator();
|
||||
const
|
||||
DATE_STR = '1976-10-12T23/34:56';
|
||||
var
|
||||
d : TDateTimeRec;
|
||||
begin
|
||||
CheckEquals(False,xsd_TryStrToDate(DATE_STR,d),Format('"%s" is not a valid date.',[DATE_STR]));
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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.
|
@ -20,7 +20,7 @@ uses
|
||||
{$ELSE}
|
||||
,TestFrameWork, xmldom, wst_delphi_xml
|
||||
{$ENDIF}
|
||||
,wst_types;
|
||||
,wst_types, dateutils;
|
||||
|
||||
const
|
||||
TestFilesPath = {$IFDEF WST_DELPHI}'.' +{$ENDIF WST_DELPHI}'.' + PathDelim + 'files' + PathDelim;
|
||||
|
@ -305,6 +305,13 @@ type
|
||||
procedure ParseDate();
|
||||
procedure Assign();
|
||||
procedure Equal();
|
||||
procedure AsDate();
|
||||
procedure AsUTCDate();
|
||||
procedure HourOffset();
|
||||
procedure HourOffset_invalid_values();
|
||||
procedure MinuteOffset();
|
||||
procedure MinuteOffset_invalid_values();
|
||||
procedure Year();
|
||||
end;
|
||||
|
||||
{ TTest_TDurationRemotable }
|
||||
@ -406,7 +413,7 @@ type
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses Math, basex_encode;
|
||||
uses Math, basex_encode, DateUtils, date_utils;
|
||||
|
||||
function RandomValue(const AMaxlen: Integer): ansistring;
|
||||
var
|
||||
@ -2284,6 +2291,173 @@ begin
|
||||
CheckEquals(sDATE, Copy(TDateRemotable.FormatDate(d),1,Length(sDATE)));
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.AsDate();
|
||||
var
|
||||
d : TDateTime;
|
||||
locObj : TDateRemotable;
|
||||
begin
|
||||
d := EncodeDateTime(1976,10,12,13,14,15,0);
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
locObj.AsDate := d;
|
||||
CheckEquals(d, locObj.AsDate);
|
||||
locObj.HourOffset := 4;
|
||||
locObj.MinuteOffset := 5;
|
||||
CheckEquals(d, locObj.AsDate);
|
||||
|
||||
// test while (Hour|Minute)Offset is not null
|
||||
locObj.HourOffset := 4;
|
||||
locObj.MinuteOffset := 5;
|
||||
locObj.AsDate := d;
|
||||
CheckEquals(d, locObj.AsDate);
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.AsUTCDate();
|
||||
var
|
||||
d, dd : TDateTime;
|
||||
locObj : TDateRemotable;
|
||||
begin
|
||||
d := EncodeDateTime(1976,10,12,13,14,15,0);
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
locObj.AsUTCDate := d;
|
||||
CheckEquals(d, locObj.AsUTCDate);
|
||||
locObj.HourOffset := 4;
|
||||
locObj.MinuteOffset := 5;
|
||||
dd := date_utils.IncHour(d,-locObj.HourOffset);
|
||||
dd := date_utils.IncMinute(dd,-locObj.MinuteOffset);
|
||||
CheckEquals(dd, locObj.AsUTCDate);
|
||||
|
||||
// test while (Hour|Minute)Offset is not null
|
||||
locObj.AsUTCDate := dd;
|
||||
CheckEquals(dd, locObj.AsUTCDate);
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.HourOffset();
|
||||
var
|
||||
locObj : TDateRemotable;
|
||||
begin
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
locObj.HourOffset := -5;
|
||||
CheckEquals(-5, locObj.HourOffset);
|
||||
locObj.HourOffset := 0;
|
||||
CheckEquals(0, locObj.HourOffset);
|
||||
locObj.HourOffset := 1;
|
||||
CheckEquals(1, locObj.HourOffset);
|
||||
locObj.HourOffset := 2;
|
||||
CheckEquals(2, locObj.HourOffset);
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.MinuteOffset();
|
||||
var
|
||||
locObj : TDateRemotable;
|
||||
begin
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
locObj.MinuteOffset := -54;
|
||||
CheckEquals(-54, locObj.MinuteOffset);
|
||||
locObj.MinuteOffset := 0;
|
||||
CheckEquals(0, locObj.MinuteOffset);
|
||||
locObj.MinuteOffset := 20;
|
||||
CheckEquals(20, locObj.MinuteOffset);
|
||||
locObj.MinuteOffset := 56;
|
||||
CheckEquals(56, locObj.MinuteOffset);
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.HourOffset_invalid_values();
|
||||
var
|
||||
locObj : TDateRemotable;
|
||||
|
||||
procedure check_invalid_value(const AValue : ShortInt);
|
||||
var
|
||||
ok : Boolean;
|
||||
begin
|
||||
try
|
||||
locObj.HourOffset := AValue;
|
||||
ok := False;
|
||||
except
|
||||
ok := True;
|
||||
end;
|
||||
Check(ok, Format('"%d" is not a valid hour offset',[AValue]));
|
||||
end;
|
||||
|
||||
begin
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
check_invalid_value(-50);
|
||||
check_invalid_value(-24);
|
||||
check_invalid_value(-15);
|
||||
check_invalid_value(15);
|
||||
check_invalid_value(24);
|
||||
check_invalid_value(50);
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.MinuteOffset_invalid_values();
|
||||
var
|
||||
locObj : TDateRemotable;
|
||||
|
||||
procedure check_invalid_value(const AValue : ShortInt);
|
||||
var
|
||||
ok : Boolean;
|
||||
begin
|
||||
try
|
||||
locObj.MinuteOffset := AValue;
|
||||
ok := False;
|
||||
except
|
||||
ok := True;
|
||||
end;
|
||||
Check(ok, Format('"%d" is not a valid minute offset',[AValue]));
|
||||
end;
|
||||
|
||||
begin
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
check_invalid_value(-60);
|
||||
check_invalid_value(-74);
|
||||
check_invalid_value(-85);
|
||||
check_invalid_value(65);
|
||||
check_invalid_value(74);
|
||||
check_invalid_value(80);
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TDateRemotable.Year();
|
||||
var
|
||||
locObj : TDateRemotable;
|
||||
begin
|
||||
locObj := TDateRemotable.Create();
|
||||
try
|
||||
locObj.AsDate := EncodeDate(1976,10,12);
|
||||
CheckEquals(1976, locObj.Year);
|
||||
locObj.AsDate := EncodeDate(2000,10,12);
|
||||
CheckEquals(2000, locObj.Year);
|
||||
locObj.AsDate := EncodeDate(2,10,12);
|
||||
CheckEquals(2, locObj.Year);
|
||||
{locObj.AsDate := EncodeDate(-1976,10,12);
|
||||
CheckEquals(-1976, locObj.Year);}
|
||||
finally
|
||||
locObj.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TTest_TDurationRemotable }
|
||||
|
||||
procedure TTest_TDurationRemotable.Clear();
|
||||
@ -3361,11 +3535,11 @@ begin
|
||||
end;
|
||||
Check(ok);
|
||||
|
||||
aa := ls.Add();
|
||||
ls.Add();
|
||||
ls.Delete(0);
|
||||
CheckEquals(0,ls.Length);
|
||||
|
||||
aa := ls.Add();
|
||||
ls.Add();
|
||||
ab := ls.Add();
|
||||
ls.Delete(0);
|
||||
CheckEquals(1,ls.Length);
|
||||
@ -3374,7 +3548,7 @@ begin
|
||||
FreeAndNil(ls);
|
||||
ls := TClass_A_CollectionRemotable.Create();
|
||||
aa := ls.Add();
|
||||
ab := ls.Add();
|
||||
ls.Add();
|
||||
ls.Delete(1);
|
||||
CheckEquals(1,ls.Length);
|
||||
CheckSame(aa,ls[0]);
|
||||
|
@ -35,7 +35,7 @@
|
||||
<PackageName Value="fpcunittestrunner"/>
|
||||
</Item3>
|
||||
</RequiredPackages>
|
||||
<Units Count="18">
|
||||
<Units Count="19">
|
||||
<Unit0>
|
||||
<Filename Value="wst_test_suite_gui.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@ -126,6 +126,11 @@
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_generators_runtime"/>
|
||||
</Unit17>
|
||||
<Unit18>
|
||||
<Filename Value="test_date_utils.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_date_utils"/>
|
||||
</Unit18>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@ -18,7 +18,7 @@ uses
|
||||
test_basex_encode, json_formatter, server_service_json, test_json,
|
||||
test_suite_utils, test_generators, fpcunittestrunner, test_std_cursors,
|
||||
test_rtti_filter, rtti_filters, wst_cursors, test_wst_cursors, test_registry, test_soap_specific,
|
||||
test_generators_runtime;
|
||||
test_generators_runtime, test_date_utils;
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
|
Reference in New Issue
Block a user