The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

# t/009_regexp.t - Patterns as regular expressions

use Test::More 0.88;
use DateTime;
use DateTime::Format::Strptime;

test(
    pattern => qr/%Y-%m-%d/,
    input   => '2009-07-13',
    output  => { year => 2009, month => 7, day => 13 }
);

test(
    pattern => qr/%Y-%m-%d Static Text/,
    input   => '2009-07-13 Static Text',
    output  => { year => 2009, month => 7, day => 13 }
);

test(
    pattern => qr/%Y-%m-%d \w+\s\w+/,
    input   => '2009-07-13 Static Text',
    output  => { year => 2009, month => 7, day => 13 }
);

test(
    pattern => qr/^%Y-%m-%d \w+\s\w+$/,
    input   => '2009-07-13 Static Text',
    output  => { year => 2009, month => 7, day => 13 }
);

eval {
    my $strptime = DateTime::Format::Strptime->new(
        pattern  => qr/^%Y-%m-%d \s+$/,
        on_error => 'croak',
    );
    my $parsed = $strptime->parse_datetime('2009-07-13 Static Text');
};
is( substr( $@, 0, 42 ), "Your datetime does not match your pattern.",
    "The strp pattern is OK, but the regex doesn't match the input." );

sub test {
    my %arg = @_;

    my $strptime = DateTime::Format::Strptime->new(
        pattern    => $arg{pattern}    || '%F %T',
        locale     => $arg{locale}     || 'en',
        time_zone  => $arg{time_zone}  || 'UTC',
        diagnostic => $arg{diagnostic} || 0,
        on_error   => $arg{on_error}   || 'undef',
    );
    isa_ok( $strptime, 'DateTime::Format::Strptime' );

    my $parsed = $strptime->parse_datetime( $arg{input} );
    isa_ok( $parsed, 'DateTime' );

    foreach my $k ( keys %{ $arg{output} } ) {
        is( $parsed->$k, $arg{output}{$k} );
    }
}

done_testing();