#!/usr/bin/env perl
require 5.008;
use warnings;
use strict;

unshift(@INC, '.');
require qpdf_test_helpers;

chdir("qpdf") or die "chdir testdir failed: $!\n";

require TestDriver;

cleanup();

my $td = new TestDriver('basic-parsing');

my @goodfiles = ("implicit null",                       # 1
                 "direct null",                         # 2
                 "unresolved null",                     # 3
                 "indirect null",                       # 4
                 "indirect bool, real",                 # 5
                 "direct bool",                         # 6
                 "integer",                             # 7
                 "real, ASCIIHexDecode",                # 8
                 "string",                              # 9
                 "array",                               # 10
                 "dictionary",                          # 11
                 "stream",                              # 12
                 "nesting, strings, names",             # 13
                 "tokenizing pipeline",                 # 14
                 "name",                                # 15
                 "object-stream",                       # 16
                 "hybrid xref",                         # 17
                 "hybrid xref old mode",                # 18
                 "xref with prev",                      # 19
                 "lots of compressible objects",        # 20
                 "array with indirect nulls",           # 21
                 );

my $n_tests = (3 * @goodfiles) + 6;

my %goodtest_overrides = ('14' => 3);
my %goodtest_flags =
    ('18' => '-ignore-xref-streams',
     '20' => '-object-streams=generate',
    );
for (my $i = 1; $i <= scalar(@goodfiles); ++$i)
{
    my $n = $goodtest_overrides{$i} || 1;
    $td->runtest("$goodfiles[$i-1]",
                 {$td->COMMAND => "test_driver $n good$i.pdf"},
                 {$td->FILE => "good$i.out",
                  $td->EXIT_STATUS => 0},
                 $td->NORMALIZE_NEWLINES);
    my $xflags = $goodtest_flags{$i} || '';
    check_pdf($td, "create qdf",
              "qpdf --static-id -qdf $xflags good$i.pdf",
              "good$i.qdf", 0);
}

check_pdf($td, "no normalization",
          "qpdf -qdf --static-id --normalize-content=n good7.pdf",
          "good7-not-normalized.qdf",
          0);

check_pdf($td, "no qdf",
          "qpdf --static-id good17.pdf",
          "good17-not-qdf.pdf",
          0);

check_pdf($td, "no recompression",
          "qpdf --static-id --stream-data=preserve good17.pdf",
          "good17-not-recompressed.pdf",
          0);

cleanup();
$td->report($n_tests);
