1# $Id: parse_interval.t 3687 2007-05-27 15:32:27Z lestrrat $ 2use strict; 3use Test::More; 4use DateTime; 5use DateTime::Duration; 6use Data::Dumper; 7 8my @positive_data; 9my @negative_data; 10 11BEGIN 12{ 13 @negative_data = ( 14 '098:08:00', 15 '1:08:00', 16 '-012:00:00', 17 ); 18 19 @positive_data = ( 20 [ '00:00:00' => DateTime::Duration->new() ], 21 [ '-08:08:00' => DateTime::Duration->new( hours => -8, minutes => -8) ], 22 [ '-98:08:00' => DateTime::Duration->new( hours => -98, minutes => -8) ], 23 [ '-100:33:00' => DateTime::Duration->new( hours => -100, minutes => -33) ], 24 [ '100:33:00' => DateTime::Duration->new( hours => 100, minutes => 33) ], 25 [ '01:00:00' => DateTime::Duration->new( hours => 1 ) ], 26 [ '-08:00:00' => DateTime::Duration->new( hours => -8 ) ], 27 [ '-1 days' => DateTime::Duration->new(days => -1) ], 28 [ '-23:59' => DateTime::Duration->new(hours => -23, minutes => -59) ], 29 [ '-1 days -00:01' => DateTime::Duration->new( days => -1, minutes => -1) ], 30 [ '1 mon -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ], 31 [ '@ 1 mon -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ], 32 [ '-1 days +02:03:00' => DateTime::Duration->new(days => -1) 33 ->add( 34 hours => 2, 35 minutes => 3, 36 ) 37 ], 38 ['9 years 1 mon -12 days +13:14:00' => DateTime::Duration->new( 39 years => 9, 40 months => 1, 41 hours => 13, 42 minutes => 14, 43 )->add(days => -12)], 44 [ '@ 1 day ago' => DateTime::Duration->new( days => -1 )], 45 [ '@ 1 day 10 mins' => DateTime::Duration->new( days => 1, minutes => 10 )], 46 [ '@ 23 hours 59 mins ago' => DateTime::Duration->new( 47 hours => -23, 48 minutes => -59 49 )], 50 [ '@ 1 day 1 min ago' => DateTime::Duration->new( days => -1, minutes => -1 )], 51 [ '10 days' => DateTime::Duration->new(days => 10 ) ], 52 [ '34 years' => DateTime::Duration->new(years => 34 )], 53 [ '3 mons' => DateTime::Duration->new(months => 3 )], 54 [ '-00:00:14' => DateTime::Duration->new(seconds => -14 )], 55 [ '1 day 02:03:04' => DateTime::Duration->new( 56 days => 1, 57 hours => 2, 58 minutes => 3, 59 seconds => 4, 60 )], 61 62 [ '5 mons 12:00:00' => DateTime::Duration->new( months => 5, hours => 12) ], 63 [ '@ 1 min' => DateTime::Duration->new(minutes => 1 )], 64 [ '@ 5 hours' => DateTime::Duration->new( hours => 5 )], 65 [ '@ 34 years' => DateTime::Duration->new(years => 34 )], 66 [ '@ 3 mons' => DateTime::Duration->new(months => 3 )], 67 [ '@ 14 secs ago' => DateTime::Duration->new( seconds => -14 )], 68 [ '@ 1 day 2 hours 3 mins 4 secs' => DateTime::Duration->new( 69 days => 1, 70 hours => 2, 71 minutes => 3, 72 seconds => 4, 73 )], 74 75 [ '@ 5 mons 12 hours' => DateTime::Duration->new( hours => 12, months => 5) ], 76 [ '@ 4541 years 4 mons 4 days 17 mins 31 secs' => DateTime::Duration->new( 77 years => 4541, 78 months => 4, 79 days => 4, 80 minutes => 17, 81 seconds => 31, 82 )], 83 84 [ '@ 6 mons 5 days 4 hours 3 mins 2 secs' => DateTime::Duration->new( 85 months => 6, 86 days => 5, 87 hours => 4, 88 minutes => 3, 89 seconds => 2, 90 )], 91 92 [ '1 days 02:03:00 ago' => DateTime::Duration->new( 93 days => -1, 94 hours => -2, 95 minutes => -3, 96 )], 97 ); 98 99 plan tests => @negative_data + @positive_data + 1; 100 use_ok 'DateTime::Format::Pg' or die; 101} 102 103{ # Positive data 104 for my $compare (@positive_data) { 105 ok !DateTime::Duration->compare( 106 DateTime::Format::Pg->parse_duration($compare->[0]), 107 $compare->[1] 108 ), "'$compare->[0]'" 109 or diag 110 Dumper [ 111 { DateTime::Format::Pg->parse_duration($compare->[0])->deltas }, 112 { $compare->[1]->deltas } 113 ] 114 ; 115 } 116} 117 118{ # Negative data 119 for my $data (@negative_data) { 120 ok(! eval { DateTime::Format::Pg->parse_duration($data) } && $@, "'$data' fails to parse"); 121 } 122} 123