qpdf/qpdf/qtest/rotate-pages.test

105 lines
4.1 KiB
Perl

#!/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('rotate-pages');
my $n_tests = 18;
# Do absolute, positive, and negative on ranges that include
# inherited and non-inherited.
# Pages 11-15 inherit /Rotate 90
# Pages 1 and 2 have explicit /Rotate 270
# Pages 16 and 17 have explicit /Rotate 180
$td->runtest("page rotation",
{$td->COMMAND => "qpdf --static-id to-rotate.pdf a.pdf" .
" --rotate=+90:1,4,11,16" .
" --rotate=180:2,5,12-13" .
" --rotate=-90:3,15,17,18"},
{$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output",
{$td->COMMAND => "qpdf-test-compare a.pdf rotated.pdf"},
{$td->FILE => "rotated.pdf", $td->EXIT_STATUS => 0});
$td->runtest("remove rotation",
{$td->COMMAND => "qpdf --static-id rotated.pdf a.pdf" .
" --qdf --no-original-object-ids --rotate=0"},
{$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output",
{$td->COMMAND => "qpdf-test-compare a.pdf unrotated.pdf"},
{$td->FILE => "unrotated.pdf", $td->EXIT_STATUS => 0});
$td->runtest("rotate all pages",
{$td->COMMAND =>
"qpdf --static-id --rotate=180 minimal.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output",
{$td->COMMAND => "qpdf-test-compare a.pdf minimal-rotated.pdf"},
{$td->FILE => "minimal-rotated.pdf", $td->EXIT_STATUS => 0});
$td->runtest("flatten with inherited rotate",
{$td->COMMAND =>
"qpdf --static-id --flatten-rotation" .
" inherited-rotate.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output",
{$td->COMMAND => "qpdf-test-compare a.pdf inherited-flattened.pdf"},
{$td->FILE => "inherited-flattened.pdf", $td->EXIT_STATUS => 0});
foreach my $angle (qw(90 180 270))
{
$td->runtest("rotate annotations",
{$td->COMMAND =>
"qpdf --static-id --qdf --rotate=$angle" .
" --flatten-rotation --no-original-object-ids" .
" form-fields-and-annotations.pdf a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0});
$td->runtest("check output (flatten $angle)",
{$td->FILE => "a.pdf"},
{$td->FILE => "annotations-rotated-$angle.pdf"});
}
# The file form-fields-and-annotations-shared.pdf contains some
# annotations that appear in multiple pages /Annots, some non-shared
# things that share appearance streams, some form fields appear on
# multiple pages, and an indirect /Annotations array. It is out of
# spec in several ways but still works in most viewers. These test
# make sure we don't make anything worse and also end up exercising
# some cases of things being copied more than once, though we also
# exercise that with legitimate test cases using overlay.
$td->runtest("shared annotations 1 page",
{$td->COMMAND =>
"qpdf --qdf --no-original-object-ids --static-id" .
" --rotate=90:1 form-fields-and-annotations-shared.pdf" .
" a.pdf --flatten-rotation"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "rotated-shared-annotations-1.pdf"});
$td->runtest("shared annotations 2 pages",
{$td->COMMAND =>
"qpdf --qdf --no-original-object-ids --static-id" .
" --rotate=90:1,2 form-fields-and-annotations-shared.pdf" .
" a.pdf --flatten-rotation"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "rotated-shared-annotations-2.pdf"});
cleanup();
$td->report($n_tests);