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

# t/007_edge.t - these tests are for edge case bug report errors

use Test::More tests => 12;
use DateTime;
use DateTime::Format::Strptime;

#diag("1.0600 - Midnight assumption");
test(
	pattern   => "%a %b %e %T %Y",
	time_zone => 'Asia/Manila',
	locale    => 'en_PH',
	input     => 'Wed Mar 22 01:00:00 1978',
	epoch     => '259344000',
);


#diag("1.0601 - Timezone defaults to UTC .. shoudld be floating")
{
	my $parser = DateTime::Format::Strptime->new(
		pattern   => '%F %T',
		locale    => 'en',
		on_error  => 'undef',
	);
	isa_ok($parser, 'DateTime::Format::Strptime');
	my $parsed = $parser->parse_datetime('2005-11-05 09:33:00');
	isa_ok($parsed, 'DateTime');
	is($parsed->time_zone->name,'floating');
}


#diag("1.0601 - Olson Time Zones - %O");
{
	my $parser = DateTime::Format::Strptime->new(
		pattern   => '%F %T %O',
		on_error  => 'undef',
	);
	isa_ok($parser, 'DateTime::Format::Strptime');
	my $parsed = $parser->parse_datetime('2005-11-05 09:33:00 Australia/Melbourne');
	isa_ok($parsed, 'DateTime');
	is($parsed->time_zone->name,'Australia/Melbourne', 'Time zone determined from string');
	is($parsed->epoch,'1131143580', 'Time zone applied to string');
}

#diag("1.08 - Good pattern, illegal datetime");
my $bad_input_test = DateTime::Format::Strptime->new(
	pattern => '%Y-%m-%d',
	time_zone => 'Australia/Melbourne',
	locale => 'en_AU',
	on_error => 'croak',
	diagnostic => 0,
);

eval { $bad_input_test->parse_datetime('0000-00-00') };
isnt($@ , '', "Illegal input should carp");
is(substr($@,0,39), 'Datetime 0000-00-00 is not a valid date', "Croak message should reflect illegal pattern");



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  => 'undef',
	);
	isa_ok($strptime, 'DateTime::Format::Strptime');

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

	is($parsed->epoch,$arg{epoch});
}