From 49621ef5a825fc0a600284fa2c33775b330e2007 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 19 Dec 2023 16:15:08 -0500 Subject: Add qpdf-test-compare for comparing PDFs with different zlib --- compare-for-test/qtest/compare.test | 93 +++++++++++++++++++++ compare-for-test/qtest/compare/diff-data-enc.pdf | Bin 0 -> 1519 bytes .../qtest/compare/diff-data-size-unc.pdf | Bin 0 -> 843 bytes compare-for-test/qtest/compare/diff-data-size.pdf | Bin 0 -> 847 bytes compare-for-test/qtest/compare/diff-data-unc.pdf | Bin 0 -> 844 bytes compare-for-test/qtest/compare/diff-data.pdf | Bin 0 -> 849 bytes compare-for-test/qtest/compare/diff-non-stream.pdf | Bin 0 -> 844 bytes .../qtest/compare/diff-num-objects.pdf | Bin 0 -> 882 bytes .../qtest/compare/diff-object-type.pdf | Bin 0 -> 765 bytes .../qtest/compare/diff-stream-dict.pdf | Bin 0 -> 844 bytes compare-for-test/qtest/compare/enc1.pdf | 41 +++++++++ compare-for-test/qtest/compare/enc2.pdf | 41 +++++++++ compare-for-test/qtest/compare/ostream1.pdf | Bin 0 -> 833 bytes compare-for-test/qtest/compare/ostream2.pdf | Bin 0 -> 843 bytes compare-for-test/qtest/compare/start.pdf | 47 +++++++++++ compare-for-test/qtest/compare/zlib-9.pdf | Bin 0 -> 844 bytes compare-for-test/qtest/compare/zlib-ng.pdf | Bin 0 -> 848 bytes compare-for-test/qtest/compare/zlib.pdf | Bin 0 -> 844 bytes 18 files changed, 222 insertions(+) create mode 100644 compare-for-test/qtest/compare.test create mode 100644 compare-for-test/qtest/compare/diff-data-enc.pdf create mode 100644 compare-for-test/qtest/compare/diff-data-size-unc.pdf create mode 100644 compare-for-test/qtest/compare/diff-data-size.pdf create mode 100644 compare-for-test/qtest/compare/diff-data-unc.pdf create mode 100644 compare-for-test/qtest/compare/diff-data.pdf create mode 100644 compare-for-test/qtest/compare/diff-non-stream.pdf create mode 100644 compare-for-test/qtest/compare/diff-num-objects.pdf create mode 100644 compare-for-test/qtest/compare/diff-object-type.pdf create mode 100644 compare-for-test/qtest/compare/diff-stream-dict.pdf create mode 100644 compare-for-test/qtest/compare/enc1.pdf create mode 100644 compare-for-test/qtest/compare/enc2.pdf create mode 100644 compare-for-test/qtest/compare/ostream1.pdf create mode 100644 compare-for-test/qtest/compare/ostream2.pdf create mode 100644 compare-for-test/qtest/compare/start.pdf create mode 100644 compare-for-test/qtest/compare/zlib-9.pdf create mode 100644 compare-for-test/qtest/compare/zlib-ng.pdf create mode 100644 compare-for-test/qtest/compare/zlib.pdf (limited to 'compare-for-test/qtest') diff --git a/compare-for-test/qtest/compare.test b/compare-for-test/qtest/compare.test new file mode 100644 index 00000000..48625cf3 --- /dev/null +++ b/compare-for-test/qtest/compare.test @@ -0,0 +1,93 @@ +#!/usr/bin/env perl +require 5.008; +BEGIN { $^W = 1; } +use strict; + +chdir("compare") or die "chdir testdir failed: $!\n"; + +require TestDriver; + +my $td = new TestDriver('compare'); + +# The comparison tool is designed so that you can write tests that run +# `compare actual expected` and compare the result to expected. This +# allows you to just replace the actual file in a comparison with the +# comparison command. If the files match, the output is the expected +# file, which means that if the actual file is the expected file with +# different zlib compression, the test will pass. If the files differ, +# the actual output shown will be the real actual output. If it is +# determined to be correct and used to replace the expected output, +# the test will pass next time regardless of whether the same zlib +# implementation is used. + +# These files are the same file compressed with a different +# compression level and/or a different zlib implementation. +my @same = qw(zlib.pdf zlib-9.pdf zlib-ng.pdf); +my $comparisons = (scalar(@same) * (scalar(@same) + 1))/2; +my $n_tests = 2 * $comparisons; + +for (my $i = 0; $i < scalar(@same); $i++) +{ + for (my $j = $i; $j < scalar(@same); $j++) + { + # Make sure the files are byte-wise different (unless they are the same file). + $td->runtest("byte-wise compare $i and $j", + {$td->COMMAND => "cmp $same[$i] $same[$j]"}, + {$td->REGEXP => ".*", $td->EXIT_STATUS => $i == $j ? 0 : "!0"}); + # Make sure they match. This is how compare should be used: + # the expected output is the same file as the second argument + # to the command. + $td->runtest("compare $i and $j", + {$td->COMMAND => "qpdf-test-compare $same[$i] $same[$j]"}, + {$td->FILE => $same[$j], $td->EXIT_STATUS => 0}); + } +} + +my @diff = ( + ["diff-num-objects.pdf", "trailer: object contents differ"], + ["diff-non-stream.pdf", "3,0: object contents differ"], + ["diff-data-size.pdf", "4,0: stream data size differs"], + ["diff-data.pdf", "4,0: stream data differs"], + ["diff-data-size-unc.pdf", "5,0: stream data size differs"], + ["diff-data-unc.pdf", "5,0: stream data differs"], + ["diff-stream-dict.pdf", "4,0: stream dictionaries differ"], + ["diff-object-type.pdf", "6,0: different types"], + ); +$n_tests += 2 * scalar(@diff); + +foreach my $f (@diff) +{ + # In a real test, the expected output would be the expected file + # as above. Here, we are actually testing the comparison tool to + # verify that it returns a non-zero status and the actual file + # when there is mismatch. Don't copy this test. + $td->runtest("$f->[0] is different", + {$td->COMMAND => "qpdf-test-compare $f->[0] zlib.pdf"}, + {$td->FILE => $f->[0], $td->EXIT_STATUS => 2}); + $td->runtest("$f->[0] is different (why)", + {$td->COMMAND => "env QPDF_COMPARE_WHY=1" . + " qpdf-test-compare $f->[0] zlib.pdf"}, + {$td->STRING => "$f->[1]\n", $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +} + +# Repeat for encrypted files. +$n_tests += 3; +$td->runtest("byte-wise compare encrypted files", + {$td->COMMAND => "cmp enc1.pdf enc2.pdf"}, + {$td->REGEXP => ".*", $td->EXIT_STATUS => "!0"}); +$td->runtest("compare encrypted files (same)", + {$td->COMMAND => "env QPDF_COMPARE_WHY=1 qpdf-test-compare enc1.pdf enc2.pdf"}, + {$td->FILE => "enc2.pdf", $td->EXIT_STATUS => 0}); +$td->runtest("compare encrypted files (different)", + {$td->COMMAND => "env QPDF_COMPARE_WHY=1 qpdf-test-compare enc1.pdf diff-data-enc.pdf"}, + {$td->STRING => "4,0: stream data differs\n", $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +# Object streams +$n_tests += 1; +$td->runtest("compare object stream files (same)", + {$td->COMMAND => "env QPDF_COMPARE_WHY=1 qpdf-test-compare ostream1.pdf ostream2.pdf"}, + {$td->FILE => "ostream2.pdf", $td->EXIT_STATUS => 0}); + +$td->report($n_tests); diff --git a/compare-for-test/qtest/compare/diff-data-enc.pdf b/compare-for-test/qtest/compare/diff-data-enc.pdf new file mode 100644 index 00000000..ae2b23b0 Binary files /dev/null and b/compare-for-test/qtest/compare/diff-data-enc.pdf differ diff --git a/compare-for-test/qtest/compare/diff-data-size-unc.pdf b/compare-for-test/qtest/compare/diff-data-size-unc.pdf new file mode 100644 index 00000000..61444ee2 Binary files /dev/null and b/compare-for-test/qtest/compare/diff-data-size-unc.pdf differ diff --git a/compare-for-test/qtest/compare/diff-data-size.pdf b/compare-for-test/qtest/compare/diff-data-size.pdf new file mode 100644 index 00000000..5dc2f5d1 Binary files /dev/null and b/compare-for-test/qtest/compare/diff-data-size.pdf differ diff --git a/compare-for-test/qtest/compare/diff-data-unc.pdf b/compare-for-test/qtest/compare/diff-data-unc.pdf new file mode 100644 index 00000000..b79f7afb Binary files /dev/null and b/compare-for-test/qtest/compare/diff-data-unc.pdf differ diff --git a/compare-for-test/qtest/compare/diff-data.pdf b/compare-for-test/qtest/compare/diff-data.pdf new file mode 100644 index 00000000..04216efa Binary files /dev/null and b/compare-for-test/qtest/compare/diff-data.pdf differ diff --git a/compare-for-test/qtest/compare/diff-non-stream.pdf b/compare-for-test/qtest/compare/diff-non-stream.pdf new file mode 100644 index 00000000..2e7e6e80 Binary files /dev/null and b/compare-for-test/qtest/compare/diff-non-stream.pdf differ diff --git a/compare-for-test/qtest/compare/diff-num-objects.pdf b/compare-for-test/qtest/compare/diff-num-objects.pdf new file mode 100644 index 00000000..ec904d15 Binary files /dev/null and b/compare-for-test/qtest/compare/diff-num-objects.pdf differ diff --git a/compare-for-test/qtest/compare/diff-object-type.pdf b/compare-for-test/qtest/compare/diff-object-type.pdf new file mode 100644 index 00000000..8380e88d Binary files /dev/null and b/compare-for-test/qtest/compare/diff-object-type.pdf differ diff --git a/compare-for-test/qtest/compare/diff-stream-dict.pdf b/compare-for-test/qtest/compare/diff-stream-dict.pdf new file mode 100644 index 00000000..cf40d323 Binary files /dev/null and b/compare-for-test/qtest/compare/diff-stream-dict.pdf differ diff --git a/compare-for-test/qtest/compare/enc1.pdf b/compare-for-test/qtest/compare/enc1.pdf new file mode 100644 index 00000000..50f4f1da --- /dev/null +++ b/compare-for-test/qtest/compare/enc1.pdf @@ -0,0 +1,41 @@ +%PDF-2.0 +% +1 0 obj +<< /Pages 2 0 R /Type /Catalog >> +endobj +2 0 obj +<< /Count 1 /Kids [ 3 0 R ] /Type /Pages >> +endobj +3 0 obj +<< /Contents [ 4 0 R 5 0 R ] /MediaBox [ 0 0 612 792 ] /Parent 2 0 R /Resources << /Font << /F1 6 0 R >> >> /Type /Page >> +endobj +4 0 obj +<< /Filter /FlateDecode /Length 64 >> +stream +*8FTbp~0(Ѣ#'őדp;ˆ*ZBjHU[gendstream +endobj +5 0 obj +<< /Length 80 /Filter /FlateDecode >> +stream +*8FTbp~0(Ѣ#'őד́i4bzKST$ EzaI<@,w6edendstream +endobj +6 0 obj +<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Subtype /Type1 /Type /Font >> +endobj +7 0 obj +<< /CF << /StdCF << /AuthEvent /DocOpen /CFM /AESV3 /Length 32 >> >> /Filter /Standard /Length 256 /O /OE <9423f87d42392b07fc90b6a2329545a1c877ecec680adc8cbc80a5ad5c3abb6c> /P -4 /Perms <84770c5fdc078585b95e8592bb0b38a3> /R 6 /StmF /StdCF /StrF /StdCF /U <4165270c9c8795068aba2bae6f89673992c6ed0e0c2d2bfca6189293a5ba3c4817f0c7a4eb476c53ac29382cea765534> /UE <7991ebbe79a40d5dfb1a1bc87394a81dbefc6ab9a1b19ee7845099ed6e7de14b> /V 5 >> +endobj +xref +0 8 +0000000000 65535 f +0000000015 00000 n +0000000064 00000 n +0000000123 00000 n +0000000261 00000 n +0000000395 00000 n +0000000545 00000 n +0000000642 00000 n +trailer << /Root 1 0 R /Size 8 /ID [<42841c13bbf709d79a200fa1691836f8><31415926535897932384626433832795>] /Encrypt 7 0 R >> +startxref +1189 +%%EOF diff --git a/compare-for-test/qtest/compare/enc2.pdf b/compare-for-test/qtest/compare/enc2.pdf new file mode 100644 index 00000000..5a025491 --- /dev/null +++ b/compare-for-test/qtest/compare/enc2.pdf @@ -0,0 +1,41 @@ +%PDF-2.0 +% +1 0 obj +<< /Pages 2 0 R /Type /Catalog >> +endobj +2 0 obj +<< /Count 1 /Kids [ 3 0 R ] /Type /Pages >> +endobj +3 0 obj +<< /Contents [ 4 0 R 5 0 R ] /MediaBox [ 0 0 612 792 ] /Parent 2 0 R /Resources << /Font << /F1 6 0 R >> >> /Type /Page >> +endobj +4 0 obj +<< /Filter /FlateDecode /Length 80 >> +stream +*8FTbp~൐_7a7ҧ'\ }??OsvZ> +stream +*8FTbp~൐_7a7ҧ'\ߥR1"'GRrЭHY_&ˢ2 ߴs> +endobj +7 0 obj +<< /CF << /StdCF << /AuthEvent /DocOpen /CFM /AESV3 /Length 32 >> >> /Filter /Standard /Length 256 /O <08cc676b1f1cc805ee97abf33aab0f77cb195093c52b65ebf04b1dce93531d8d11b6cd60da17599e4d3679513b957140> /OE /P -4 /Perms <973bd88c774165b5e58f722b3ced7bf4> /R 6 /StmF /StdCF /StrF /StdCF /U <8203fcce3446c8747d515ac3368fb817e0b7a290e1298d2a0246cd3b559d4544aebba6df7a97f0c8e74f98638f658468> /UE <689a534cf6e2ea26b9a5f9073ccfcf268700cc129779a5d1bbabc9eae77c72f0> /V 5 >> +endobj +xref +0 8 +0000000000 65535 f +0000000015 00000 n +0000000064 00000 n +0000000123 00000 n +0000000261 00000 n +0000000411 00000 n +0000000561 00000 n +0000000658 00000 n +trailer << /Root 1 0 R /Size 8 /ID [<42841c13bbf709d79a200fa1691836f8><31415926535897932384626433832795>] /Encrypt 7 0 R >> +startxref +1205 +%%EOF diff --git a/compare-for-test/qtest/compare/ostream1.pdf b/compare-for-test/qtest/compare/ostream1.pdf new file mode 100644 index 00000000..b340ae33 Binary files /dev/null and b/compare-for-test/qtest/compare/ostream1.pdf differ diff --git a/compare-for-test/qtest/compare/ostream2.pdf b/compare-for-test/qtest/compare/ostream2.pdf new file mode 100644 index 00000000..27d6b2c2 Binary files /dev/null and b/compare-for-test/qtest/compare/ostream2.pdf differ diff --git a/compare-for-test/qtest/compare/start.pdf b/compare-for-test/qtest/compare/start.pdf new file mode 100644 index 00000000..79001f24 --- /dev/null +++ b/compare-for-test/qtest/compare/start.pdf @@ -0,0 +1,47 @@ +%PDF-2.0 +% +1 0 obj +<< /Pages 2 0 R /Type /Catalog >> +endobj +2 0 obj +<< /Count 1 /Kids [ 3 0 R ] /Type /Pages >> +endobj +3 0 obj +<< /Contents [ 4 0 R 5 0 R ] /MediaBox [ 0 0 612 792 ] /Parent 2 0 R /Resources << /Font << /F1 6 0 R >> >> /Type /Page >> +endobj +4 0 obj +<< /Length 48 /Filter /FlateDecode >> +stream +BT + /F1 24 Tf + 72 720 Td + (WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW) Tj +ET +endstream +endobj +5 0 obj +<< /Length 43 >> +stream +BT + /F1 24 Tf + 72 681 Td + (Potato) Tj +ET +endstream +endobj +6 0 obj +<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Subtype /Type1 /Type /Font >> +endobj +xref +0 7 +0000000000 65535 f +0000000015 00000 n +0000000064 00000 n +0000000123 00000 n +0000000261 00000 n +0000000379 00000 n +0000000471 00000 n +trailer << /Root 1 0 R /Size 7 /ID [<42841c13bbf709d79a200fa1691836f8><31415926535897932384626433832795>] >> +startxref +568 +%%EOF diff --git a/compare-for-test/qtest/compare/zlib-9.pdf b/compare-for-test/qtest/compare/zlib-9.pdf new file mode 100644 index 00000000..16187f31 Binary files /dev/null and b/compare-for-test/qtest/compare/zlib-9.pdf differ diff --git a/compare-for-test/qtest/compare/zlib-ng.pdf b/compare-for-test/qtest/compare/zlib-ng.pdf new file mode 100644 index 00000000..9d8c4329 Binary files /dev/null and b/compare-for-test/qtest/compare/zlib-ng.pdf differ diff --git a/compare-for-test/qtest/compare/zlib.pdf b/compare-for-test/qtest/compare/zlib.pdf new file mode 100644 index 00000000..9a24beb4 Binary files /dev/null and b/compare-for-test/qtest/compare/zlib.pdf differ -- cgit v1.2.3-54-g00ecf