#!/usr/bin/perl
BEGIN {
push
(
@INC
, File::Spec->catdir (
"."
,
"t"
,
"test-helper"
)); }
BEGIN {
my
$fish
= turn_fish_on_off_for_advanced_config ();
unlink
(
$fish
);
DBUG_PUSH (
$fish
);
DBUG_ENTER_FUNC ();
use_ok (
"Advanced::Config::Date"
);
DBUG_VOID_RETURN ();
}
END {
DBUG_ENTER_FUNC ();
DBUG_VOID_RETURN ();
}
my
%english_tests
= (
"1995:01:24T09:08:17.1823213"
=>
"1995-01-24"
,
"1995-01-24T09:08:17.1823213"
=>
"1995-01-24"
,
"1995.01.24T09:08:17.1823213"
=>
"1995-01-24"
,
"1995 01 24T09:08:17.1823213"
=>
"1995-01-24"
,
"95 01 24T09:08:17.1823213"
=>
"1995-01-24"
,
"20171225"
=>
"2017-12-25"
,
"12252017"
=>
"2017-12-25"
,
"Hello 20171225 World!"
=>
"2017-12-25"
,
"Wed, 16 Jun 94 07:29:35 CST"
=>
"1994-06-16"
,
"Thu, 13 Oct 94 10:13:13 -0700"
=>
"1994-10-13"
,
"Thu, 13 October 94 10:13:13 -0700"
=>
"1994-10-13"
,
"Wed, 9 Nov 1994 09:50:32 -0500 (EST)"
=>
"1994-11-09"
,
"25 dec 2017 18:05"
=>
"2017-12-25"
,
"25/dec/2017 18:05"
=>
"2017-12-25"
,
"17/dec/25 18:05"
=>
"2017-12-25"
,
'17\dec\25 18:05'
=>
"2017-12-25"
,
"dec/25/17 18:05"
=>
"2017-12-25"
,
"dec/25/2017 18:05"
=>
"2017-12-25"
,
"Mon, 25/dec/2017 18:05"
=>
"2017-12-25"
,
"mon Dec. 25th 17 18:05"
=>
"2017-12-25"
,
"Mon December 25th 17 18:05"
=>
"2017-12-25"
,
"Mon December 25th 03:45:08 2017"
=>
"2017-12-25"
,
"Mon December 25 03:45:08 2017"
=>
"2017-12-25"
,
"Mon December 25, 2017 at 03:45:08"
=>
"2017-12-25"
,
"Monday December 25 2017 at 03:45:08"
=>
"2017-12-25"
,
"Wed, 16 Jun 94 07:29:35 CST"
=>
"1994-06-16"
,
"Wed, 16 Jun 1994 07:29:35 CST"
=>
"1994-06-16"
,
);
my
%dl_tests
= (
"wed Jun 16"
=>
"%04d-06-16"
,
"wed 16 Jun"
=>
"%04d-06-16"
,
);
my
%german_tests
= (
"1995:01:24T09:08:17.1823213"
=>
"1995-01-24"
,
"1995-01-24T09:08:17.1823213"
=>
"1995-01-24"
,
"Mit, 16 Jun 94 07:29:35 CST"
=>
"1994-06-16"
,
"Don, 13 Okt 94 10:13:13 -0700"
=>
"1994-10-13"
,
"Don, 13 Oktober 94 10:13:13 -0700"
=>
"1994-10-13"
,
"Mit, 9 Nov 1994 09:50:32 -0500 (EST)"
=>
"1994-11-09"
,
"25 dez 2017 17:05"
=>
"2017-12-25"
,
"25/dez/2017 17:05"
=>
"2017-12-25"
,
"17/dez/25 17:05"
=>
"2017-12-25"
,
"Mon, 25/dez/2017 17:05"
=>
"2017-12-25"
,
"mon Dez. 25th 17 17:05"
=>
"2017-12-25"
,
"Mon Dezember 25th 17 17:05"
=>
"2017-12-25"
,
"Mon Dezember 25th 03:45:08 2017"
=>
"2017-12-25"
,
"Mon Dezember 25 03:45:08 2017"
=>
"2017-12-25"
,
"Mon Dezember 25, 2017 03:45:08"
=>
"2017-12-25"
,
"Mit, 16 Jun 94 07:29:35 CST"
=>
"1994-06-16"
,
"März 23rd, 2019"
=>
"2019-03-23"
,
"MÄRZ 22nd, 2019"
=>
"2019-03-22"
,
);
my
%spanish_tests
= (
"1995:01:24T09:08:17.1823213"
=>
"1995-01-24"
,
"1995-01-24T09:08:17.1823213"
=>
"1995-01-24"
,
"Mié, 16 Jun 94 07:29:35 CST"
=>
"1994-06-16"
,
"Jue, 13 Oct 94 10:13:13 -0700"
=>
"1994-10-13"
,
"Jue, 13 Octubre 94 10:13:13 -0700"
=>
"1994-10-13"
,
"Mié, 9 Nov 1994 09:50:32 -0500 (EST)"
=>
"1994-11-09"
,
"25 dic 2017 17:05"
=>
"2017-12-25"
,
"25/dic/2017 17:05"
=>
"2017-12-25"
,
"17/dic/25 17:05"
=>
"2017-12-25"
,
"Lun, 25/dic/2017 17:05"
=>
"2017-12-25"
,
"Lun Dic. 25to 17 17:05"
=>
"2017-12-25"
,
"Lun Diciembre 25to 17 17:05"
=>
"2017-12-25"
,
"Lun Diciembre 25to 03:45:08 2017"
=>
"2017-12-25"
,
"Lun Diciembre 25 03:45:08 2017"
=>
"2017-12-25"
,
"Lun Diciembre 25, 2017 03:45:08"
=>
"2017-12-25"
,
"Mié, 16 Jun 94 07:29:35 CST"
=>
"1994-06-16"
,
);
my
%no_tests
;
{
DBUG_ENTER_FUNC (
@ARGV
);
dbug_ok (1,
"In the MAIN program ..."
);
my
$opt
= 1;
my
$tst1
= run_date_parse_tests (
"English"
,
$opt
, \
%english_tests
, 1 );
my
$tst2
= run_date_parse_tests (
"German"
,
$opt
, \
%german_tests
, 1 );
my
$tst3
= run_date_parse_tests (
"german"
,
$opt
, \
%no_tests
, 0 );
my
$tst4
= run_date_parse_tests (
"Spanish"
,
$opt
, \
%spanish_tests
, 1 );
my
$tst5
= run_date_parse_tests (
"Greek"
,
$opt
, \
%no_tests
, 0 );
my
$tst6
= run_date_parse_tests (
"Klingon"
,
$opt
, \
%no_tests
, 0 );
if
( _date_language_installed () ) {
run_dl_dates ( 1,
"English"
,
$opt
, \
%dl_tests
);
}
run_dl_dates ( 0,
"English"
,
$opt
, \
%dl_tests
);
$tst1
= run_date_parse_tests (
"English"
,
$opt
, \
%english_tests
, 1 );
foreach
my
$lang
(
"English"
,
"German"
,
"german"
,
"Spanish"
,
"Greek"
,
"Klingon"
) {
run_special_dates (
$lang
,
$opt
);
}
done_testing ();
DBUG_LEAVE (0);
}
sub
run_date_parse_tests
{
DBUG_ENTER_FUNC (
@_
);
my
$lang
=
shift
;
my
$fwarn
=
shift
;
my
$tests
=
shift
;
my
$valid_language
=
shift
;
dbug_ok (1,
"-"
x50);
my
$ans
= swap_language (
$lang
,
$fwarn
, 0 );
if
(
$ans
eq
$lang
) {
dbug_ok (
$valid_language
,
"Language successfully swapped to '${lang}'."
);
}
elsif
( _date_language_installed () ) {
dbug_is (
$valid_language
, 0,
"${lang} is NOT supported. Still using '${ans}'."
);
return
DBUG_RETURN (0);
}
else
{
dbug_ok ( 1,
"${lang} is NOT installed. Still using '${ans}'."
);
return
DBUG_RETURN (0);
}
my
$test_order
=
"1,2,3"
;
foreach
my
$k
(
sort
keys
%{
$tests
} ) {
my
$date
= parse_date (
$k
,
$test_order
, 0, 1 );
$date
=
"???"
unless
(
defined
$date
);
dbug_is (
$date
,
$tests
->{
$k
},
"$k ==> ${date}"
);
}
DBUG_RETURN (1);
}
sub
run_special_dates
{
DBUG_ENTER_FUNC (
@_
);
my
$lang
=
shift
;
my
$opt
=
shift
;
dbug_ok (1,
"-"
x50);
my
$ans
= swap_language (
$lang
, 0, 0 );
if
(
$ans
eq
$lang
) {
dbug_ok ( 1,
"Language successfully swapped to '${lang}'."
);
}
else
{
dbug_ok ( 1,
"${lang} is NOT supported. Still using '${ans}'."
);
return
DBUG_RETURN (0);
}
my
(
$month_ref
,
$week_ref
) = init_special_date_arrays (
$lang
, 0,
$opt
, 0);
my
@answers
;
foreach
(0..11) {
push
(
@answers
,
sprintf
(
"2018-%02d-01"
,
$month_ref
->[
$_
]));
}
foreach
my
$mode
( 1, 2, 3 ) {
(
$month_ref
,
$week_ref
) = init_special_date_arrays (
$lang
,
$mode
,
$opt
, 0);
foreach
my
$i
( 0..11 ) {
my
$sample
=
sprintf
(
"%s 1 2018"
,
$month_ref
->[
$i
]);
my
$date
= parse_date (
$sample
,
"1,2,3"
, 0, 1 );
$date
=
"???"
unless
(
defined
$date
);
dbug_is (
$date
,
$answers
[
$i
],
"${sample} ==> ${date}"
);
}
}
DBUG_RETURN (1);
}
sub
run_dl_dates
{
DBUG_ENTER_FUNC (
@_
);
my
$dl_installed
=
shift
;
my
$lang
=
shift
;
my
$fwarn
=
shift
;
my
$tests
=
shift
;
dbug_ok (1,
"-"
x50);
my
$ans
= swap_language (
$lang
,
$fwarn
, 0 );
if
(
$ans
eq
$lang
) {
dbug_ok ( 1,
"Language successfully swapped to '${lang}'."
);
}
else
{
dbug_ok ( 1,
"${lang} is NOT supported. Still using '${ans}'."
);
return
DBUG_RETURN (0);
}
my
$year
= (
localtime
(
time
()))[5] + 1900;
foreach
my
$k
(
sort
keys
%{
$tests
} ) {
my
$date
= parse_date (
$k
,
"1,2,3"
,
$dl_installed
, 1 );
$date
=
"???"
unless
(
defined
$date
);
if
(
$dl_installed
) {
my
$dt1
=
sprintf
(
$tests
->{
$k
},
$year
);
my
$dt2
=
sprintf
(
$tests
->{
$k
},
$year
- 1 );
unless
(dbug_ok (
$date
eq
$dt1
||
$date
eq
$dt2
,
"$k ==> ${date}"
)) {
DBUG_PRINT (
"INFO"
,
"Should have been %s or %s"
,
$dt1
,
$dt2
);
}
}
else
{
dbug_is (
$date
,
"???"
,
"$k ==> ${date}, Date::Languge::str2time not used."
);
}
}
DBUG_RETURN (1);
}