1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
use strict;
use warnings;
use Test::More;
use Date::Extract;
my %formats = (
'today' =>
sub { is($_->ymd, DateTime->today->ymd, "today") },
'tomorrow' =>
sub { is($_->ymd, DateTime->today->add(days => 1)->ymd, "tomorrow") },
'yesterday' =>
sub { is($_->ymd, DateTime->today->add(days => -1)->ymd, "yesterday") },
'last Friday' =>
sub {
is($_->day_name, 'Friday', "last Friday");
cmp_ok($_->epoch, '<', DateTime->today->epoch, "last Friday");
},
'next Monday' =>
sub {
is($_->day_name, 'Monday', "next Monday");
cmp_ok($_->epoch, '>', DateTime->today->epoch, "next Monday");
},
'previous Sat' => {
TODO => 'Not handled by us or DTFN yet',
test => sub {
is($_->day_name, 'Saturday', "previous Sat");
cmp_ok($_->epoch, '<', DateTime->today->epoch, "previous Sat");
},
},
'Monday' =>
sub { is($_->day_name, 'Monday', "Monday") },
'Mon' =>
sub { is($_->day_name, 'Monday', "Mon") },
'November 13th, 1986' =>
sub { is($_->ymd, '1986-11-13', "November 13th, 1986") },
'13 November 1986' =>
sub { is($_->ymd, '1986-11-13', "13 November 1986") },
'Nov 13, 1986' =>
sub { is($_->ymd, '1986-11-13', "Nov 13th, 1986") },
'November 13th' =>
sub { is($_->ymd, DateTime->today->year . '-11-13', "November 13th") },
'Nov 13' =>
sub { is($_->ymd, DateTime->today->year . '-11-13', "Nov 13") },
'13 Nov' =>
sub { is($_->ymd, DateTime->today->year . '-11-13', "13 Nov") },
'13th November' =>
sub { is($_->ymd, DateTime->today->year . '-11-13', "13th November") },
'1986/11/13' =>
sub { is($_->ymd, '1986-11-13', "1986/11/13") },
'1986-11-13' =>
sub { is($_->ymd, '1986-11-13', "1986-11-13") },
'11-13-86' => {
TODO => 'Not handled by us or DTFN yet',
test => sub { is($_->ymd, '1986-11-13', "11-13-86") },
},
'11/13/1986' => {
TODO => 'Not handled by us or DTFN yet',
test => sub { is($_->ymd, '1986-11-13', "11/13/1986") },
},
);
plan tests => 2 + 2 * keys(%formats);
while (my ($input, $checker) = each %formats) {
$checker = { test => $checker }
if ref $checker eq 'CODE';
TODO: {
local $TODO = $checker->{'TODO'} if $checker->{'TODO'};
my $got = Date::Extract->extract($input);
ok($got, "got a date out of $input");
unless ($got) {
fail("No date parsed, so no use running the checker");
next;
}
local $_ = $got;
local $Test::Builder::Level = $Test::Builder::Level + 1;
$checker->{'test'}->();
}
}
|