#!/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('copy-foreign-objects');

my $n_tests = 11;

foreach my $d ([25, 1], [26, 2], [27, 3])
{
    my ($testn, $outn) = @$d;
    $td->runtest("copy objects $outn",
                 {$td->COMMAND => "test_driver $testn" .
                      " minimal.pdf copy-foreign-objects-in.pdf"},
                 {$td->FILE => "copy-foreign-objects-$testn.out",
                      $td->EXIT_STATUS => 0},
                 $td->NORMALIZE_NEWLINES);
    $td->runtest("check output",
                 {$td->FILE => "a.pdf"},
                 {$td->FILE => "copy-foreign-objects-out$outn.pdf"});
}
$td->runtest("copy objects error",
             {$td->COMMAND => "test_driver 28" .
                  " copy-foreign-objects-in.pdf minimal.pdf"},
             {$td->FILE => "copy-foreign-objects-errors.out",
              $td->EXIT_STATUS => 0},
             $td->NORMALIZE_NEWLINES);

# Issue 449 involved indirect /Filter or /DecodeParms in streams that
# had their stream data replaced. The hand-generated
# indirect-filter.pdf file more or less reproduces the situation but
# doesn't result in the same internal error that 449 did with 10.0.1.
# The file issue-449.pdf was minimized by hand from a test case and
# does produce an internal error, though the exact reason is unclear.
# It seems to just have to do with the order in which things are
# copied.
$td->runtest("indirect filters",
             {$td->COMMAND => "test_driver 69 indirect-filter.pdf"},
             {$td->STRING => "test 69 done\n", $td->EXIT_STATUS => 0},
             $td->NORMALIZE_NEWLINES);
foreach my $i (0, 1)
{
    $td->runtest("check output",
                 {$td->FILE => "auto-$i.pdf"},
                 {$td->FILE => "indirect-filter-out-$i.pdf"});
}
$td->runtest("issue 449",
             {$td->COMMAND => "test_driver 69 issue-449.pdf"},
             {$td->STRING => "test 69 done\n", $td->EXIT_STATUS => 0},
             $td->NORMALIZE_NEWLINES);

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