# t/004_croak.t - make sure we croak when we should use Test::More tests => 30; use DateTime::Format::Strptime; # 1..2 my $return; eval { $return = DateTime::Format::Strptime->new(pattern => '%Y') }; isa_ok($return, 'DateTime::Format::Strptime','Legal Pattern in constructor should return object and not croak'); is($@, '', "Croak message should be empty"); # 3..4 eval { DateTime::Format::Strptime->new(pattern => '%Y %Q') }; isnt($@, undef, "Illegal pattern in constructor should croak"); is(substr($@,0,42), "Unidentified token in pattern: %Q in %Y %Q", "Croak message should reflect illegal pattern"); #-------------------------------------------------------------------------------- diag("\nTurned Croak Off"); my $object = DateTime::Format::Strptime->new( pattern => '%Y %D', time_zone => 'Australia/Melbourne', locale => 'en_AU', on_error => 'undef', diagnostic => 0, ); # 5..6 is($object->pattern('%Y %D'), '%Y %D','Legal Pattern in pattern() should return the pattern'); is($object->{errmsg} , undef, "Error message should be undef"); # 7..8 is($object->pattern("%Q") , undef, "Illegal Pattern should return undef"); is($object->{errmsg} , 'Unidentified token in pattern: %Q in %Q. Leaving old pattern intact.', "Error message should reflect illegal pattern"); # 9..10 is($object->pattern("%{gumtree}") , undef, "Non-existing DateTime call should return undef"); is($object->{errmsg} , 'Unidentified token in pattern: %{gumtree} in %{gumtree}. Leaving old pattern intact.', "Error message should reflect illegal pattern"); # Make sure pattern goes back to being useful $object->pattern('%Y %D'); # 11..12 is($object->parse_datetime("Not a datetime") , undef, "Non-matching date time string should return undef"); is($object->{errmsg} , 'Your datetime does not match your pattern.', "Error message should reflect non-matching datetime"); # 13..14 is($object->parse_datetime("2002 11/30/03") , undef, "Ambiguous date time string should return undef"); is($object->{errmsg} , 'Your two year values (03 and 2002) do not match.', "Error message should reflect Ambiguous date time string"); #-------------------------------------------------------------------------------- diag("\nTurned Croak On"); $object = DateTime::Format::Strptime->new( pattern => '%Y %D', time_zone => 'Australia/Melbourne', locale => 'en_AU', on_error => 'croak', diagnostic => 0, ); { # Make warn die so $@ is set. There's probably a better way. local $SIG{__WARN__} = sub { die "WARN: $_[0]" }; eval { $object->pattern("%Q") }; } # 15..16 isnt($@ , '', "Illegal Pattern should carp"); is(substr($@,0,74), 'WARN: Unidentified token in pattern: %Q in %Q. Leaving old pattern intact.', "Croak message should reflect illegal pattern"); # 17..18 eval { $object->parse_datetime("Not a datetime") }; isnt($@ , '', "Non-matching date time string should croak"); is(substr($@,0,42), "Your datetime does not match your pattern.", "Croak message should reflect non-matching datetime"); # 19..20 eval { $object->parse_datetime("2002 11/30/03") }; isnt($@ , '', "Ambiguous date time string should croak"); is(substr($@,0,48), "Your two year values (03 and 2002) do not match.", "Croak message should reflect Ambiguous date time string"); #-------------------------------------------------------------------------------- diag("\nTurned Croak to Sub"); $object = DateTime::Format::Strptime->new( pattern => '%Y %D', time_zone => 'Australia/Melbourne', locale => 'en_AU', on_error => sub{$_[0]->{errmsg} = 'Oops! Teehee! '.$_[1]; 1}, diagnostic => 0, ); # 21..22 is($object->pattern('%Y %D'), '%Y %D','Legal Pattern in pattern() should return the pattern'); is($object->{errmsg} , undef, "Error message should be undef"); # 23..24 is($object->pattern("%Q") , undef, "Illegal Pattern should return undef"); is($object->{errmsg} , 'Oops! Teehee! Unidentified token in pattern: %Q in %Q. Leaving old pattern intact.', "Error message should reflect illegal pattern"); # 25..26 is($object->pattern("%{gumtree}") , undef, "Non-existing DateTime call should return undef"); is($object->{errmsg} , 'Oops! Teehee! Unidentified token in pattern: %{gumtree} in %{gumtree}. Leaving old pattern intact.', "Error message should reflect illegal pattern"); # Make sure pattern goes back to being useful $object->pattern('%Y %D'); # 27..28 is($object->parse_datetime("Not a datetime") , undef, "Non-matching date time string should return undef"); is($object->{errmsg} , 'Oops! Teehee! Your datetime does not match your pattern.', "Error message should reflect non-matching datetime"); # 29..30 is($object->parse_datetime("2002 11/30/03") , undef, "Ambiguous date time string should return undef"); is($object->{errmsg} , 'Oops! Teehee! Your two year values (03 and 2002) do not match.', "Error message should reflect Ambiguous date time string");