#!/usr/bin/perl -w

use warnings;
use strict;
use Carp;

use Test::More tests => 32;
use_ok('CAM::PDF');

is_deeply([CAM::PDF->rangeToArray(0,10)],
          [0,1,2,3,4,5,6,7,8,9,10], 'range test');
is_deeply([CAM::PDF->rangeToArray(0,10,'1-2')],
          [1,2], 'range test');
is_deeply([CAM::PDF->rangeToArray(0,10,'-3')],
          [0,1,2,3], 'range test');
is_deeply([CAM::PDF->rangeToArray(0,10,'8-')],
          [8,9,10], 'range test');
is_deeply([CAM::PDF->rangeToArray(0,10,3,4,'6-8',11,2)],
          [3,4,6,7,8,2], 'range test');
is_deeply([CAM::PDF->rangeToArray(0,10,'7-4')],
          [7,6,5,4], 'range test');
is_deeply([CAM::PDF->rangeToArray(10,20,'1-3,6,22,25-28')],
          [], 'range test');
is_deeply([CAM::PDF->rangeToArray(10,20,'-3')],
          [], 'range test');
is_deeply([CAM::PDF->rangeToArray(10,20,'25-')],
          [], 'range test');
is_deeply([CAM::PDF->rangeToArray(1, 15, '1,3-5,12,9', '14-', '8 - 6, -2')],
          [1,3,4,5,12,9,14,15,8,7,6,1,2], 'range test');

is(CAM::PDF->new('nosuchfile.pdf'), undef, 'open non-existent file');

foreach my $strtest (
   ['(foo)', 'foo'],
   ['(foo)(bar)', 'foo'], # parsing should stop at the end of the string
   ['((foo))', '(foo)'],
   ['(\\(foo\\))', '(foo)'],
   ['(\\(foo)', '(foo'],
   ['(foo\\))', 'foo)'],
   ['(foo\\\\)', 'foo\\'],
   ['(foo\\\\\\))', 'foo\\)'],
   ['(foo\\n)', 'foo'."\n"],
   ['(foo\\r)', 'foo'."\r"],
   ['(foo\\t)', 'foo'."\t"],
   ['(octal\\040)', 'octal '],
   ['(octal\\40)', 'octal '],
)
{
   my $orig = $strtest->[0];
   my $expect = $strtest->[1];
   is(CAM::PDF->parseString(\$orig)->{value}, $expect,
      'parseString '.$orig);
}


foreach my $strtest (
   ['<20>', ' '],
   ['<2>', ' '],
   ['<666f6f>', 'foo'],
)
{
   my $orig = $strtest->[0];
   my $expect = $strtest->[1];
   is(CAM::PDF->parseHexString(\$orig)->{value}, $expect,
      'parseHexString '.$orig);
}

is(CAM::PDF->parseBoolean(\'true')->{value}, 'true', 'parseBoolean');
is(CAM::PDF->parseBoolean(\'TRUE')->{value}, 'true', 'parseBoolean');
is(CAM::PDF->parseBoolean(\'false')->{value}, 'false', 'parseBoolean');
is(CAM::PDF->parseNull(\'null')->{value}, undef, 'parseNull');
