#!perl -w

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

use Test::More tests => 21;
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} );
	}
}