1#!perl -w
2
3# t/008_epoch.t - Epoch (%s) tests
4
5use Test::More 0.88;
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# is UTC recognized?
21test(
22    pattern   => "%a %d %b %Y %H:%M:%S %p %Z",
23    time_zone => 'UTC',
24    locale    => 'en_US',
25    input     => "Thu 08 Jul 2010 09:49:02 AM UTC",
26    epoch     => 1278582542,
27);
28
29# diag("Epoch with a no given time_zone assumes 'floating'. (Though when given an epoch, really should assume UTC ..)");
30{
31    my $parser = DateTime::Format::Strptime->new(
32        pattern  => '%s',
33        locale   => 'en',
34        on_error => 'undef',
35    );
36    isa_ok( $parser, 'DateTime::Format::Strptime' );
37    my $parsed = $parser->parse_datetime('1235282552');
38    isa_ok( $parsed, 'DateTime' );
39    is( $parsed->year,            2009 );
40    is( $parsed->month,           2 );
41    is( $parsed->day,             22 );
42    is( $parsed->hour,            6 );
43    is( $parsed->minute,          2 );
44    is( $parsed->second,          32 );
45    is( $parsed->nanosecond * 1,  0 );
46    is( $parsed->time_zone->name, 'floating' );
47}
48
49# diag("Epoch with a time_zone should return the correct time for that TZ when the epoch occurs in UTC");
50{
51    my $parser = DateTime::Format::Strptime->new(
52        pattern   => '%s',
53        locale    => 'en',
54        on_error  => 'undef',
55        time_zone => 'Asia/Manila',
56    );
57    isa_ok( $parser, 'DateTime::Format::Strptime' );
58    my $parsed = $parser->parse_datetime('1235282552');
59    isa_ok( $parsed, 'DateTime' );
60    is( $parsed->year,            2009 );
61    is( $parsed->month,           2 );
62    is( $parsed->day,             22 );
63    is( $parsed->hour,            14 );
64    is( $parsed->minute,          2 );
65    is( $parsed->second,          32 );
66    is( $parsed->nanosecond * 1,  0 );
67    is( $parsed->time_zone->name, 'Asia/Manila' );
68}
69
70sub test {
71    my %arg = @_;
72
73    my $strptime = DateTime::Format::Strptime->new(
74        pattern    => $arg{pattern}    || '%F %T',
75        locale     => $arg{locale}     || 'en',
76        time_zone  => $arg{time_zone}  || 'UTC',
77        diagnostic => $arg{diagnostic} || 0,
78        on_error   => 'undef',
79    );
80    isa_ok( $strptime, 'DateTime::Format::Strptime' );
81
82    my $parsed = $strptime->parse_datetime( $arg{input} );
83    isa_ok( $parsed, 'DateTime' );
84
85    is( $parsed->epoch, $arg{epoch} );
86}
87
88done_testing();
89