|
Packit |
9002b2 |
use strict;
|
|
Packit |
9002b2 |
use warnings;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
use Test::More;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
use DateTime::Format::Builder;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Test multiple parsers having the same length
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $which;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my @parsers = (
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
length => 10,
|
|
Packit |
9002b2 |
params => [qw( month year day )],
|
|
Packit |
9002b2 |
regex => qr/^(\d\d)-(\d\d\d\d)-(\d\d)$/,
|
|
Packit |
9002b2 |
postprocess => sub { $which = 1 },
|
|
Packit |
9002b2 |
},
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
length => 10,
|
|
Packit |
9002b2 |
params => [qw( year month day )],
|
|
Packit |
9002b2 |
regex => qr/^(\d\d\d\d)-(\d\d)-(\d\d)$/,
|
|
Packit |
9002b2 |
postprocess => sub { $which = 2 },
|
|
Packit |
9002b2 |
},
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
length => 10,
|
|
Packit |
9002b2 |
params => [qw( day month year )],
|
|
Packit |
9002b2 |
regex => qr/^(\d\d)-(\d\d)-(\d\d\d\d)$/,
|
|
Packit |
9002b2 |
postprocess => sub { $which = 3 },
|
|
Packit |
9002b2 |
},
|
|
Packit |
9002b2 |
);
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my %data = (
|
|
Packit |
9002b2 |
1 => "05-2003-10",
|
|
Packit |
9002b2 |
2 => "2003-04-07",
|
|
Packit |
9002b2 |
3 => "13-12-2006",
|
|
Packit |
9002b2 |
);
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $parser = DateTime::Format::Builder->parser(@parsers);
|
|
Packit |
9002b2 |
isa_ok( $parser => 'DateTime::Format::Builder' );
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
for my $length ( sort keys %data ) {
|
|
Packit |
9002b2 |
my $date = $data{$length};
|
|
Packit |
9002b2 |
my $dt = $parser->parse_datetime($date);
|
|
Packit |
9002b2 |
isa_ok $dt => 'DateTime';
|
|
Packit |
9002b2 |
is( $which, $length, "Used length parser $length" );
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Test single parser having multiple lengths
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $which = 0;
|
|
Packit |
9002b2 |
my @parsers = (
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
length => 4,
|
|
Packit |
9002b2 |
regex => qr/bar/,
|
|
Packit |
9002b2 |
params => [],
|
|
Packit |
9002b2 |
preprocess => sub { $which = 4 }
|
|
Packit |
9002b2 |
},
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
length => 5,
|
|
Packit |
9002b2 |
regex => qr/bar/,
|
|
Packit |
9002b2 |
params => [],
|
|
Packit |
9002b2 |
preprocess => sub { $which = 5 }
|
|
Packit |
9002b2 |
},
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
length => [qw( 4 5 )],
|
|
Packit |
9002b2 |
regex => qr/(-?\d\d\d\d)/,
|
|
Packit |
9002b2 |
params => [qw( year )],
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
);
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my $parser = DateTime::Format::Builder->parser(@parsers);
|
|
Packit |
9002b2 |
isa_ok( $parser => 'DateTime::Format::Builder' );
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my %data = (
|
|
Packit |
9002b2 |
4 => 2003,
|
|
Packit |
9002b2 |
5 => -2003,
|
|
Packit |
9002b2 |
);
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
for my $length ( sort keys %data ) {
|
|
Packit |
9002b2 |
my $year = $data{$length};
|
|
Packit |
9002b2 |
my $dt = $parser->parse_datetime($year);
|
|
Packit |
9002b2 |
isa_ok( $dt => 'DateTime' );
|
|
Packit |
9002b2 |
is( $length, $which, "Parser length $length for $year" );
|
|
Packit |
9002b2 |
is( $dt->year, $year, "Year $year matches" );
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
done_testing();
|