lengths.t   [plain text]


# $Id: lengths.t,v 1.5 2003/06/25 08:38:14 koschei Exp $
use strict;
use lib 'inc';
use blib;
use Test::More tests => 15;
use vars qw( $class );

BEGIN {
    $class = 'DateTime::Format::Builder';
    use_ok $class;
}

# Test multiple parsers having the same length
{
    my $which;

    my @parsers = (
	{
	    length => 10,
	    params => [ qw( month year day ) ],
	    regex  => qr/^(\d\d)-(\d\d\d\d)-(\d\d)$/,
	    postprocess => sub { $which = 1 },
	},
	{
	    length => 10,
	    params => [ qw( year month day ) ],
	    regex  => qr/^(\d\d\d\d)-(\d\d)-(\d\d)$/,
	    postprocess => sub { $which = 2 },
	},
	{
	    length => 10,
	    params => [ qw( day month year ) ],
	    regex  => qr/^(\d\d)-(\d\d)-(\d\d\d\d)$/,
	    postprocess => sub { $which = 3 },
	},
    );

    my %data = (
	1 => "05-2003-10",
	2 => "2003-04-07",
	3 => "13-12-2006",
    );

    {
	my $parser = $class->parser( @parsers );
	isa_ok( $parser => $class );

	for my $length (sort keys %data)
	{
	    my $date = $data{$length};
	    my $dt = $parser->parse_datetime( $date );
	    isa_ok $dt => 'DateTime';
	    is( $which, $length, "Used length parser $length" );
	}
    }
}

# Test single parser having multiple lengths
{
    my $which = 0;
    my @parsers = (
	{
	    length     => 4,
	    regex      => qr/bar/,
	    params     => [],
	    preprocess => sub { $which = 4 }
	},
	{
	    length     => 5,
	    regex      => qr/bar/,
	    params     => [],
	    preprocess => sub { $which = 5 }
	},
	{
	    length => [qw( 4 5 )],
	    regex  => qr/(-?\d\d\d\d)/,
	    params => [qw( year )],
	}
    );

    my $parser = $class->parser( @parsers );
    isa_ok( $parser => $class );

    my %data = (
	4 => 2003,
	5 => -2003,
    );

    for my $length (sort keys %data)
    {
	my $year = $data{$length};
	my $dt = $parser->parse_datetime( $year );
	isa_ok( $dt => 'DateTime' );
	is( $length, $which, "Parser length $length for $year" );
	is( $dt->year, $year, "Year $year matches" );
    }


}