1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
use strict;
use warnings;
use Test::More;
use DateTime::Format::Builder;
my $sample = 'SampleClassWithArgs1';
{
my $parser = DateTime::Format::Builder->parser(
{
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)$/,
postprocess => sub {
my %p = (@_);
$p{parsed}->{time_zone} = $p{args}->[0];
1;
}
}
);
my $dt = $parser->parse_datetime( "20030716T163245", 'Europe/Berlin' );
is( $dt->time_zone->name, 'Europe/Berlin' );
}
{
DateTime::Format::Builder->create_class(
class => $sample,
parsers => {
parse_datetime => [
[
preprocess => sub {
my %p = (@_);
$p{parsed}->{time_zone} = $p{args}->[0];
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)$/,
}
],
},
);
my $dt = $sample->parse_datetime( "20030716T163245", 'Asia/Singapore' );
is( $dt->time_zone->name, 'Asia/Singapore' );
}
{
$sample++;
DateTime::Format::Builder->create_class(
class => $sample,
parsers => {
parse_datetime => [
[
preprocess => sub {
my %p = @_;
my %o = @{ $p{args} };
$p{parsed}->{time_zone} = $o{global} if $o{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 %o = @{ $p{args} };
$p{parsed}->{time_zone} = $o{pre} if $o{pre};
return $p{input};
},
postprocess => sub {
my %p = @_;
my %o = @{ $p{args} };
$p{parsed}->{time_zone} = $o{post} if $o{post};
return 1;
},
},
],
}
);
my %tests = (
global => 'Africa/Cairo',
pre => 'Europe/London',
post => 'Australia/Sydney',
);
while ( my ( $callback, $value ) = each %tests ) {
my $parser = $sample->new();
my $dt = $parser->parse_datetime(
"20030716T163245",
$callback => $value,
);
is( $dt->time_zone->name, $value );
}
}
done_testing();
|