Blame t/lengths.t

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();