Blame t/param.t

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