parse_interval.t   [plain text]


# $Id: parse_interval.t,v 1.2 2003/05/30 14:04:49 cfaerber Exp $
use Test::More tests => 8;
use DateTime::Format::Pg 0.02;

my @results = (
  { 'days' => -1 },
  { 'minutes' => -(23*60+59) },
  { 'days' => -1, 'minutes' => -1 },
  { 'months' => 1, 'days' => -1 },
);

my %tests = (
  '-1 days' => $results[0],
  '-23:59' => $results[1],
  '-1 days -00:01' => $results[2],
  '1 mon -1 days' => $results[3],

  '@ 1 day ago' => $results[0],
  '@ 23 hours 59 mins ago' => $results[1],
  '@ 1 day 1 min ago' => $results[2],
  '@ 1 mon -1 days' => $results[3],
);

foreach my $test (keys %tests) {
  my $du = DateTime::Format::Pg->parse_interval($test);
  is( duration_hash_to_string($du->deltas()),
      duration_hash_to_string(%{$tests{$test}}) );
}

# for better Test::More::is output
#
sub duration_hash_to_string {
  my %hash = @_;
  my @vals = ();
  foreach(qw (months days minutes seconds nanoseconds)) {
    push @vals, sprintf('%s=%d',$_,$hash{$_}) if $hash{$_};
  }
  return join(', ',@vals);
}