1#!perl -w
2
3# t/008_epoch.t - Epoch (%s) tests
4
5use Test::More tests => 23;
6use DateTime;
7use DateTime::Format::Strptime;
8
9my $time = time;
10
11# Epoch in, epoch out, now.
12test(
13    pattern   => "%s",
14    time_zone => 'Asia/Manila',
15    locale    => 'en_PH',
16    input     => $time,
17    epoch     => $time,
18);
19
20# diag("Epoch with a no given time_zone assumes 'floating'. (Though when given an epoch, really should assume UTC ..)");
21{
22    my $parser = DateTime::Format::Strptime->new(
23        pattern  => '%s',
24        locale   => 'en',
25        on_error => 'undef',
26    );
27    isa_ok( $parser, 'DateTime::Format::Strptime' );
28    my $parsed = $parser->parse_datetime('1235282552');
29    isa_ok( $parsed, 'DateTime' );
30    is( $parsed->year,            2009 );
31    is( $parsed->month,           2 );
32    is( $parsed->day,             22 );
33    is( $parsed->hour,            6 );
34    is( $parsed->minute,          2 );
35    is( $parsed->second,          32 );
36    is( $parsed->nanosecond * 1,  0 );
37    is( $parsed->time_zone->name, 'floating' );
38}
39
40# diag("Epoch with a time_zone should return the correct time for that TZ when the epoch occurs in UTC");
41{
42    my $parser = DateTime::Format::Strptime->new(
43        pattern   => '%s',
44        locale    => 'en',
45        on_error  => 'undef',
46        time_zone => 'Asia/Manila',
47    );
48    isa_ok( $parser, 'DateTime::Format::Strptime' );
49    my $parsed = $parser->parse_datetime('1235282552');
50    isa_ok( $parsed, 'DateTime' );
51    is( $parsed->year,            2009 );
52    is( $parsed->month,           2 );
53    is( $parsed->day,             22 );
54    is( $parsed->hour,            14 );
55    is( $parsed->minute,          2 );
56    is( $parsed->second,          32 );
57    is( $parsed->nanosecond * 1,  0 );
58    is( $parsed->time_zone->name, 'Asia/Manila' );
59}
60
61sub test {
62    my %arg = @_;
63
64    my $strptime = DateTime::Format::Strptime->new(
65        pattern    => $arg{pattern}    || '%F %T',
66        locale     => $arg{locale}     || 'en',
67        time_zone  => $arg{time_zone}  || 'UTC',
68        diagnostic => $arg{diagnostic} || 0,
69        on_error   => 'undef',
70    );
71    isa_ok( $strptime, 'DateTime::Format::Strptime' );
72
73    my $parsed = $strptime->parse_datetime( $arg{input} );
74    isa_ok( $parsed, 'DateTime' );
75
76    is( $parsed->epoch, $arg{epoch} );
77}
78