diff options
Diffstat (limited to 'qpdf/qtest/attachments.test')
-rw-r--r-- | qpdf/qtest/attachments.test | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/qpdf/qtest/attachments.test b/qpdf/qtest/attachments.test new file mode 100644 index 00000000..dbd47161 --- /dev/null +++ b/qpdf/qtest/attachments.test @@ -0,0 +1,222 @@ +#!/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('attachments'); + +my $n_tests = 37; + +open(F, ">auto-txt") or die; +print F "from file"; +close(F); +$td->runtest("attachments", + {$td->COMMAND => "test_driver 76 minimal.pdf auto-txt"}, + {$td->FILE => "test76.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("show attachment", + {$td->COMMAND => "qpdf --show-attachment=att1 a.pdf"}, + {$td->STRING => "from file", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => "test76.pdf"}); +$td->runtest("list attachments", + {$td->COMMAND => "qpdf --list-attachments a.pdf"}, + {$td->FILE => "test76-list.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("list attachments verbose", + {$td->COMMAND => "qpdf --list-attachments --verbose a.pdf"}, + {$td->FILE => "test76-list-verbose.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("attachments json", + {$td->COMMAND => "qpdf --json=1 --json-key=attachments a.pdf"}, + {$td->FILE => "test76-json.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("remove attachment (test_driver)", + {$td->COMMAND => "test_driver 77 test76.pdf"}, + {$td->STRING => "test 77 done\n", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => "test77.pdf"}); +$td->runtest("remove attachment (cli)", + {$td->COMMAND => "qpdf --remove-attachment=att2 test76.pdf" . + " --static-id --qdf --verbose b.pdf"}, + {$td->FILE => "remove-attachment.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "b.pdf"}, + {$td->FILE => "test77.pdf"}); +$td->runtest("show missing attachment", + {$td->COMMAND => "qpdf --show-attachment=att2 b.pdf"}, + {$td->STRING => "qpdf: attachment att2 not found\n", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +$td->runtest("remove missing attachment", + {$td->COMMAND => "qpdf --remove-attachment=att2 b.pdf c.pdf"}, + {$td->STRING => "qpdf: attachment att2 not found\n", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("add attachment: bad creation date", + {$td->COMMAND => "qpdf minimal.pdf a.pdf" . + " --add-attachment auto-txt --creationdate=potato --"}, + {$td->REGEXP => ".*potato is not a valid PDF timestamp.*", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +$td->runtest("add attachment: bad mod date", + {$td->COMMAND => "qpdf minimal.pdf a.pdf" . + " --add-attachment auto-txt --moddate=potato --"}, + {$td->REGEXP => ".*potato is not a valid PDF timestamp.*", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +$td->runtest("add attachment: bad mod date", + {$td->COMMAND => "qpdf minimal.pdf a.pdf" . + " --add-attachment auto-txt --mimetype=potato --"}, + {$td->REGEXP => + ".*mime type should be specified as type/subtype.*", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +$td->runtest("add attachment: trailing slash", + {$td->COMMAND => "qpdf minimal.pdf a.pdf" . + " --add-attachment --"}, + {$td->REGEXP => ".*add attachment: no file specified.*", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +foreach my $i (qw(1 2 3)) +{ + open(F, ">auto-$i") or die; + print F "attachment $i"; + close(F); +} +my @dates = ("--creationdate=D:20210210091359-05'00'", + "--moddate=D:20210210141359Z"); +$td->runtest("add attachments", + {$td->COMMAND => + [qw(qpdf minimal.pdf a.pdf --no-original-object-ids), + qw(--verbose --static-id --qdf), + qw(--add-attachment ./auto-1), @dates, + qw(--mimetype=text/plain --), + qw(--add-attachment ./auto-2 --key=auto-Two), @dates, '--', + qw(--add-attachment ./auto-3 --filename=auto-Three.txt), + @dates, '--description=two words', '--']}, + {$td->FILE => "add-attachments-1.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("list attachments", + {$td->COMMAND => "qpdf --list-attachments a.pdf --verbose"}, + {$td->FILE => "list-attachments-1.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => "add-attachments-1.pdf"}, + $td->NORMALIZE_NEWLINES); +$td->runtest("add attachments: duplicate", + {$td->COMMAND => + "qpdf a.pdf b.pdf --verbose --add-attachment ./auto-1 --"}, + {$td->FILE => "add-attachments-duplicate.out", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +$td->runtest("add attachments: replace", + {$td->COMMAND => + [qw(qpdf a.pdf b.pdf --no-original-object-ids), + qw(--verbose --static-id --qdf), + qw(--add-attachment ./auto-2 --key=auto-1 --replace), + @dates, '--']}, + {$td->FILE => "add-attachments-2.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("list attachments", + {$td->COMMAND => "qpdf --list-attachments b.pdf --verbose"}, + {$td->FILE => "list-attachments-3.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "b.pdf"}, + {$td->FILE => "add-attachments-2.pdf"}, + $td->NORMALIZE_NEWLINES); +$td->runtest("copy attachments", + {$td->COMMAND => + "qpdf --verbose --no-original-object-ids" . + " --static-id --qdf minimal.pdf b.pdf" . + " --copy-attachments-from a.pdf --"}, + {$td->FILE => "copy-attachments-1.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("list attachments", + {$td->COMMAND => "qpdf --list-attachments b.pdf --verbose"}, + {$td->FILE => "list-attachments-1.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "b.pdf"}, + {$td->FILE => "add-attachments-1.pdf"}, + $td->NORMALIZE_NEWLINES); +$td->runtest("copy attachments: duplicate", + {$td->COMMAND => + "qpdf --verbose --no-original-object-ids" . + " --static-id --qdf a.pdf c.pdf" . + " --copy-attachments-from b.pdf --"}, + {$td->FILE => "copy-attachments-duplicate.out", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +$td->runtest("copy attachments: prefix", + {$td->COMMAND => + "qpdf --verbose --no-original-object-ids" . + " --static-id --qdf a.pdf c.pdf" . + " --copy-attachments-from b.pdf --prefix=1- --"}, + {$td->FILE => "copy-attachments-2.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("list attachments", + {$td->COMMAND => "qpdf --list-attachments c.pdf --verbose"}, + {$td->FILE => "list-attachments-2.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "c.pdf"}, + {$td->FILE => "copy-attachments-2.pdf"}, + $td->NORMALIZE_NEWLINES); +$td->runtest("add attachments: current date", + {$td->COMMAND => + [qw(qpdf minimal.pdf a.pdf --encrypt u o 256 --), + qw(--verbose --add-attachment ./auto-1 --)]}, + {$td->FILE => "add-attachments-3.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("list attachments", + {$td->COMMAND => + "qpdf --password=u --list-attachments a.pdf --verbose"}, + {$td->FILE => "list-attachments-4.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +# The object to show here is the one in list-attachments-4.out +$td->runtest("check dates", + {$td->COMMAND => "qpdf --show-object=6 a.pdf --password=u"}, + {$td->REGEXP => ".*CreationDate \\(D:\\d+.*ModDate \\(D:\\d+.*", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("remove multiple attachments", + {$td->COMMAND => + "qpdf --verbose --static-id add-attachments-1.pdf a.pdf" . + " --remove-attachment=auto-1 --remove-attachment=auto-Two"}, + {$td->FILE => "remove-multiple-attachments.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => "remove-multiple-attachments.pdf"}); +$td->runtest("remove multiple attachments (json)", + {$td->COMMAND => + "qpdf --job-json-file=remove-multiple-attachments.json"}, + {$td->FILE => "remove-multiple-attachments-json.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "b.pdf"}, + {$td->FILE => "remove-multiple-attachments.pdf"}); + +cleanup(); +$td->report($n_tests); |