qpdf/qpdf/qtest/inline-images.test

111 lines
4.0 KiB
Perl

#!/usr/bin/env perl
require 5.008;
use warnings;
use strict;
use Digest::MD5;
use File::Copy;
unshift(@INC, '.');
require qpdf_test_helpers;
chdir("qpdf") or die "chdir testdir failed: $!\n";
require TestDriver;
cleanup();
my $td = new TestDriver('inline-images');
my $n_compare_pdfs = 0;
my $n_tests = 10;
# The file large-inline-image.pdf is a hand-crafted file with several
# inline images of various sizes including one that is two megabytes,
# encoded in base85, and has a base85-encoding that contains EI
# surrounded by delimiters several times. This exercises the EI
# detection code added in qpdf 8.4.
$td->runtest("complex inline image parsing",
{$td->COMMAND =>
"qpdf --qdf --static-id large-inline-image.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "large-inline-image.qdf"});
$td->runtest("eof in inline image",
{$td->COMMAND =>
"qpdf --qdf --static-id eof-in-inline-image.pdf a.pdf"},
{$td->FILE => "eof-inline-qdf.out", $td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "eof-in-inline-image.qdf"});
$td->runtest("externalize eof in inline image",
{$td->COMMAND =>
"qpdf --qdf --externalize-inline-images" .
" --static-id eof-in-inline-image.pdf a.pdf"},
{$td->FILE => "eof-inline-qdf.out", $td->EXIT_STATUS => 3},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "eof-in-inline-image-ii.qdf"});
$td->runtest("externalize damaged image",
{$td->COMMAND =>
"qpdf --externalize-inline-images" .
" --compress-streams=n --static-id" .
" damaged-inline-image.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "damaged-inline-image-out.pdf"});
$td->runtest("named colorspace",
{$td->COMMAND =>
"qpdf --static-id --externalize-inline-images" .
" --ii-min-bytes=0 inline-image-colorspace-lookup.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->COMMAND => "qpdf-test-compare a.pdf inline-image-colorspace-lookup-out.pdf"},
{$td->FILE => "inline-image-colorspace-lookup-out.pdf", $td->EXIT_STATUS => 0});
my @eii_tests = (
['inline-images', 80],
['large-inline-image', 1024],
['nested-form-xobjects-inline-images', 20],
);
$n_tests += 4 * scalar(@eii_tests);
$n_compare_pdfs += 2 * scalar(@eii_tests);
foreach my $d (@eii_tests)
{
my ($file, $threshold) = @$d;
$td->runtest("inline image $file (all)",
{$td->COMMAND =>
"qpdf --qdf --static-id --externalize-inline-images" .
" --ii-min-bytes=0 $file.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "$file-ii-all.pdf"});
compare_pdfs($td, "$file.pdf", "a.pdf");
$td->runtest("inline image $file (some)",
{$td->COMMAND =>
"qpdf --qdf --static-id --externalize-inline-images" .
" --ii-min-bytes=$threshold $file.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "$file-ii-some.pdf"});
compare_pdfs($td, "$file.pdf", "a.pdf");
}
cleanup();
$td->report(calc_ntests($n_tests, $n_compare_pdfs));