use strict;
use warnings;
use Test::More;
use DateTime::Format::Builder;
{
my $sample = 'SampleClassWithSelf';
DateTime::Format::Builder->create_class(
class => $sample,
parsers => {
parse_datetime => [
[
preprocess => sub {
my %p = @_;
my $self = $p{self};
$p{parsed}->{time_zone} = $self->{global}
if $self->{global};
return $p{input};
},
],
{
params => [qw( year month day hour minute second )],
regex => qr/^(\d\d\d\d)(\d\d)(\d\d)T(\d\d)(\d\d)(\d\d)$/,
preprocess => sub {
my %p = @_;
my $self = $p{self};
$p{parsed}->{time_zone} = $self->{pre}
if $self->{pre};
return $p{input};
},
postprocess => sub {
my %p = @_;
my $self = $p{self};
$p{parsed}->{time_zone} = $self->{post}
if $self->{post};
return 1;
},
},
],
}
);
my %tests = (
global => 'Africa/Cairo',
pre => 'Europe/London',
post => 'Australia/Sydney',
);
while ( my ( $callback, $value ) = each %tests ) {
my $parser = $sample->new();
$parser->{$callback} = $value;
my $dt = $parser->parse_datetime("20030716T163245");
is( $dt->time_zone->name, $value );
}
}
done_testing();