1#!perl -w
2
3# t/002_basic.t - check module dates in various formats
4
5use Test::More tests => 17;
6use DateTime::Format::Strptime;
7use DateTime;
8use DateTime::TimeZone;
9
10my $object = DateTime::Format::Strptime->new(
11	pattern => '%D',
12#	time_zone => 'Australia/Melbourne',
13	diagnostic => 0,
14);
15
16my @tests = (
17	# Simple dates
18	['%Y-%m-%d',	'1998-12-31'],
19	['%y-%m-%d', '98-12-31'],
20	['%Y years, %j days', '1998 years, 312 days'],
21	['%b %d, %Y', 'Jan 24, 2003'],
22	['%B %d, %Y', 'January 24, 2003'],
23
24	# Simple times
25	['%H:%M:%S', '23:45:56'],
26	['%l:%M:%S %p', '11:34:56 PM'],
27	
28	# With Nanoseconds
29	['%H:%M:%S.%N', '23:45:56.123456789'],
30	['%H:%M:%S.%6N', '23:45:56.123456'],
31	['%H:%M:%S.%3N', '23:45:56.123'],
32
33	# Complex dates
34	['%Y;%j = %Y-%m-%d', '2003;56 = 2003-02-25'],
35	[q|%d %b '%y = %Y-%m-%d|, q|25 Feb '03 = 2003-02-25|],
36);
37
38foreach (@tests) {
39	my ($pattern, $data, $expect) = @$_;
40	$expect ||= $data;
41	$object->pattern($pattern);
42	is($object->format_datetime( $object->parse_datetime( $data ) ), $expect, $pattern);
43}
44
45SKIP: {
46	skip "You don't have the latest DateTime. Older version have a bug whereby 12am and 12pm are shown as 0am and 0pm. You should upgrade.", 1 
47		unless $DateTime::VERSION >= 0.11;
48
49	$object->pattern('%l:%M:%S %p');
50	is($object->format_datetime( $object->parse_datetime( '12:34:56 AM' ) ), 
51		'12:34:56 AM', '%l:%M:%S %p');
52}
53
54
55# Timezones
56SKIP: {
57	skip "You don't have the latest DateTime::TimeZone. Older versions don't display all time zone information. You should upgrade.", 3 
58		unless $DateTime::TimeZone::VERSION >= 0.13;
59
60	$object->pattern('%H:%M:%S %z');
61	is($object->format_datetime( $object->parse_datetime( '23:45:56 +1000' ) ), 
62		'23:45:56 +1000', '%H:%M:%S %z');
63
64	$object->pattern('%H:%M:%S %Z');
65	is($object->format_datetime( $object->parse_datetime( '23:45:56 AEST' ) ), 
66		'23:45:56 +1000', '%H:%M:%S %Z');
67
68	$object->pattern('%H:%M:%S %z %Z');
69	is($object->format_datetime( $object->parse_datetime( '23:45:56 +1000 AEST' ) ), 
70		'23:45:56 +1000 +1000', '%H:%M:%S %z %Z');
71}
72
73$object->time_zone('Australia/Perth');
74$object->pattern('%Y %H:%M:%S %Z');
75is($object->format_datetime( $object->parse_datetime( '2003 23:45:56 MDT' ) ), '2003 13:45:56 WST', $object->pattern);
76
77