1#!/usr/bin/perl -w
2
3# test bug 3766
4#	http://rt.cpan.org/NoAuth/Bug.html?id=3766
5#   returns undef when you pass it a DateTime object
6#   whose timezone has been explicitly set.
7
8# test bug 3771
9#   http://rt.cpan.org/NoAuth/Bug.html?id=3771
10#   format_datetime method a DateTime object whose timestamp is set
11#   explicitly as "00:00:00", the method will not print a timestamp or an offset.
12
13use strict;
14use Test::More tests => 5;
15
16use DateTime;
17use DateTime::Format::W3CDTF;
18
19my @dates = (
20    {
21        date => {
22            year => 1977, month => 11, day => 11, hour => 1, minute => 12,
23            time_zone => 'America/Los_Angeles'
24        },
25        w3cdtf => '1977-11-11T01:12:00-08:00',
26        msg    => 'formatter works with explicit timezone',
27    }, {
28        date => {
29            year => 1977, month => 4, day => 7,
30            time_zone => 'America/Los_Angeles'
31        },
32        w3cdtf => '1977-04-07T00:00:00-08:00',
33        msg    => 'formatter works without timestamp',
34    }, {
35        date => {
36            year => 2003, month => 4, day => 7, hour => 2,
37            time_zone => 'America/Los_Angeles'
38        },
39        w3cdtf => '2003-04-07T02:00:00-07:00',
40        msg    => 'formatter properly recognizing daylights saving'
41    }, {
42        date => {
43            year => 2003, month => 12, day => 25, hour => 0, minute => 00,
44            second => 00, time_zone => 'America/Montreal'
45        },
46        w3cdtf => '2003-12-25T00:00:00-05:00',
47        msg    => 'formatter properly formats midnight'
48    }, {
49        date => {
50            year => 2009, month => 11, day => 25,, time_zone => 'Europe/London'
51        },
52        w3cdtf => '2009-11-25T00:00:00+00:00',
53        msg    => 'formatter handles tz offset of 0 properly'
54    }
55);
56my $f = DateTime::Format::W3CDTF->new();
57
58foreach my $d (@dates) {
59    my $dt = DateTime->new( %{ $d->{date} } );
60    is( $f->format_datetime($dt), $d->{w3cdtf}, $d->{msg} );
61}
62