mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-02-04 03:14:45 +01:00
160 lines
5.1 KiB
ObjectPascal
160 lines
5.1 KiB
ObjectPascal
program strtmtest;
|
|
|
|
{$ifdef FPC}
|
|
{$mode objfpc}{$H+}
|
|
{$else}
|
|
{$apptype console}
|
|
{$endif}
|
|
|
|
uses sysutils,sysconst{$ifndef fpc},windows{$endif};
|
|
|
|
{$ifndef fpc}
|
|
function defaultformatsettings:TFormatSettings;
|
|
begin
|
|
GetLocaleFormatSettings(getsystemdefaultlcid,result);
|
|
end;
|
|
{$endif}
|
|
var exitwitherror:integer =0;
|
|
fmt : TFormatSettings;
|
|
|
|
Procedure Check(TestNo : Integer; inputstr : String;shouldfailstrtotime:boolean=false;shouldfailcomparison:boolean=false;resultstr:string='');
|
|
|
|
var dt :TDateTime;
|
|
outputstr:ansistring;
|
|
|
|
begin
|
|
if TryStrToTime(inputstr,dt,fmt) then
|
|
begin
|
|
if shouldfailstrtotime then
|
|
begin
|
|
writeln('test ',TestNo,' should fail on strtotime while it didn''t ',timetostr(dt,fmt));
|
|
exitwitherror:=1;
|
|
end
|
|
else
|
|
begin
|
|
outputstr:=TimeToStr(dt,fmt); // note because of this bugs can also be in timetostr
|
|
if resultstr<>'' then
|
|
begin
|
|
if outputstr<>resultstr then
|
|
begin
|
|
writeln('test ',TestNo,' should be "',resultstr,'" is "',outputstr,'"');
|
|
exitwitherror:=1;
|
|
end;
|
|
exit; // don't do other comparisons
|
|
end;
|
|
|
|
if inputstr<>outputstr then
|
|
begin
|
|
if not shouldfailcomparison then
|
|
begin
|
|
writeln('test ',TestNo,' failed "',inputstr,'" <> "',outputstr,'"');
|
|
exitwitherror:=1;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if shouldfailcomparison then
|
|
begin
|
|
writeln('test ',TestNo,' succeeded "',inputstr,'" = "',outputstr,'", while it shouldn''t');
|
|
exitwitherror:=1;
|
|
end;
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
if not shouldfailstrtotime then
|
|
begin
|
|
Writeln('Test ',TestNo,' failed: ',inputstr);
|
|
exitwitherror:=1;
|
|
end;
|
|
end;
|
|
|
|
procedure setdecimalsep(c:char);
|
|
begin
|
|
fmt.DecimalSeparator:=c;
|
|
fmt.longtimeformat:='hh:nn:ss'+fmt.DecimalSeparator+'zzz';
|
|
end;
|
|
|
|
var value: word;
|
|
code : longint;
|
|
begin
|
|
fmt:=defaultformatsettings;
|
|
fmt.TimeSeparator:=':';
|
|
fmt.TimeAmstring:='AM';
|
|
fmt.TimePmstring:='PM';
|
|
|
|
setdecimalsep('.');
|
|
Check( 0,'12:34:45.789',false,false);
|
|
Check( 1,'12:34:45,789',true,false);
|
|
|
|
setdecimalsep(',');
|
|
Check( 2,'12:34:45.789',true,false);
|
|
Check( 3,'12:34:45,789',false,false);
|
|
|
|
Check( 4,'12 am',false,false,'00:00:00,000');
|
|
Check( 5,'pm 12:34',false,false,'12:34:00,000');
|
|
Check( 6,'12::45',true,false);
|
|
Check( 7,'12:34:56 px',true,false);
|
|
Check( 8,'12:34:5x',true,false);
|
|
Check( 9,'12:34:56:78:90',true,false);
|
|
Check(10,'5 am',false,false,'05:00:00,000');
|
|
Check(11,'5 pm',false,false,'17:00:00,000');
|
|
Check(12,'am 5',false,false,'05:00:00,000');
|
|
Check(13,'pm 5',false,false,'17:00:00,000');
|
|
fmt.longtimeformat:='hh:nn:ss'+fmt.DecimalSeparator+'zzz am/pm';
|
|
Check(14,'5 am',false,false,'05:00:00,000 am');
|
|
Check(15,'5 pm',false,false,'05:00:00,000 pm');
|
|
Check(16,'am 5',false,false,'05:00:00,000 am');
|
|
Check(17,'pm 5',false,false,'05:00:00,000 pm');
|
|
fmt.TimeAmstring:='AM';
|
|
fmt.TimePmstring:='PM';
|
|
fmt.longtimeformat:='hh:nn:ss'+fmt.DecimalSeparator+'zzz a/p';
|
|
Check(18,'am 5',false,false,'05:00:00,000 a');
|
|
Check(19,'pm 5',false,false,'05:00:00,000 p');
|
|
|
|
fmt.TimeAMString:='a'; fmt.TimePMString:='p';
|
|
|
|
Check(20,'a 5',false,false,'05:00:00,000 a');
|
|
Check(21,'p 5',false,false,'05:00:00,000 p');
|
|
Check(22,'12:',True,false);
|
|
Check(23,'13:14:',True,false);
|
|
Check(24,'a 17:00',True,false);
|
|
Check(25,'p 19:00',True,false);
|
|
Check(26,'1:2:3',false,false,'01:02:03,000 a');
|
|
Check(27,'1:4',false,false,'01:04:00,000 a');
|
|
Check(28,'111:2:3',True,false);
|
|
Check(29,'1:444',True,false);
|
|
Check(30,'1:2:333',True,false);
|
|
Check(31,'1:4:55,4',False,false,'01:04:55,004 a');
|
|
Check(32,'1:4:55,12',False,false,'01:04:55,012 a');
|
|
Check(33,'1:4:55,004',False,false,'01:04:55,004 a');
|
|
Check(34,'1:4:55,0012',False,false,'01:04:55,012 a');
|
|
Check(35,'1:4:55,004'#9'am',true,false,'01:04:55,004'#9'am');
|
|
Check(36,#9'1:4:55,0012',true,false,'01:04:55,012 a');
|
|
Check(37,' 1:4:55,4',False,false,'01:04:55,004 a');
|
|
Check(38,'1: 4:55,12',False,false,'01:04:55,012 a');
|
|
Check(39,'1:4: 55,004',False,false,'01:04:55,004 a');
|
|
Check(40,'1:4:55, 2',False,false,'01:04:55,002 a');
|
|
Check(41,'1:4:55, 4',False,false,'01:04:55,004 a'); // note more padding then needed
|
|
Check(42,'1: 4:55, 4',False,false,'01:04:55,004 a'); // note more padding then needed
|
|
Check(43,'1: 4: 55, 4',False,false,'01:04:55,004 a'); // note more padding then needed
|
|
Check(44,'1: 4: 55, 4',False,false,'01:04:55,004 a'); // note more padding then needed
|
|
Check(45,'1 4 55 4',True,false);
|
|
fmt.timeseparator:=' ';
|
|
Check(46,'01 04 55',True,false);
|
|
Check(47,'a 01',false,false,'01 00 00,000 a');
|
|
Check(52,'a01',false,false,'01 00 00,000 a');
|
|
fmt.TimeSeparator:=':';
|
|
Check(48,'1:4:55,0000000000000000000000012',false,false,'01:04:55,012 a');
|
|
Check(49,'1:4:55,0000100012',True,false);
|
|
Check(50,'1:4:55,000001012',True,false);
|
|
Check(51,'12:034:00056',false,false,'12:34:56,000 p');
|
|
|
|
exitcode:=exitwitherror;
|
|
|
|
{$ifndef fpc} // halt in delphi ide
|
|
readln;
|
|
{$endif}
|
|
end.
|
|
|