git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@609 8e941d3f-bd1b-0410-a28a-d453659cc2b4

This commit is contained in:
inoussa
2008-11-24 15:39:35 +00:00
parent 69a8145509
commit a43bb35944
7 changed files with 762 additions and 87 deletions

View 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.

View File

@ -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;

View File

@ -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]);

View File

@ -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>

View File

@ -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;