From d28969bf375d75ff7c1b911d84708727510a7a8a Mon Sep 17 00:00:00 2001 From: m-holger Date: Sat, 10 Feb 2024 16:59:20 +0000 Subject: [PATCH] Add additional sparse array JSON tests --- qpdf/qtest/many-nulls.test | 19 +- qpdf/qtest/qpdf/minimal-nulls-1.json | 453 +++++++++++++++++++++++++++ qpdf/qtest/qpdf/minimal-nulls-2.json | 424 +++++++++++++++++++++++++ qpdf/qtest/qpdf/minimal-nulls.pdf | 387 +++++++++++++++++++++++ 4 files changed, 1282 insertions(+), 1 deletion(-) create mode 100644 qpdf/qtest/qpdf/minimal-nulls-1.json create mode 100644 qpdf/qtest/qpdf/minimal-nulls-2.json create mode 100644 qpdf/qtest/qpdf/minimal-nulls.pdf diff --git a/qpdf/qtest/many-nulls.test b/qpdf/qtest/many-nulls.test index 8a723d53..26ce5f8a 100644 --- a/qpdf/qtest/many-nulls.test +++ b/qpdf/qtest/many-nulls.test @@ -33,5 +33,22 @@ $td->runtest("copy sparse array", {$td->COMMAND => "test_driver 97 many-nulls.pdf"}, {$td->STRING => "test 97 done\n", $td->EXIT_STATUS => 0}, $td->NORMALIZE_NEWLINES); +$td->runtest("copy file with many nulls", + {$td->COMMAND => + "qpdf minimal-nulls.pdf --qdf --static-id --no-original-object-ids a.pdf"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("compare files", + {$td->FILE => "a.pdf"}, + {$td->FILE => "minimal-nulls.pdf"}); +$td->runtest("file with many nulls to JSON v1", + {$td->COMMAND => "qpdf minimal-nulls.pdf --json=1 -"}, + {$td->FILE => "minimal-nulls-1.json", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("file with many nulls to JSON v2", + {$td->COMMAND => "qpdf minimal-nulls.pdf --json=2 -"}, + {$td->FILE => "minimal-nulls-2.json", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + cleanup(); -$td->report(4); +$td->report(8); diff --git a/qpdf/qtest/qpdf/minimal-nulls-1.json b/qpdf/qtest/qpdf/minimal-nulls-1.json new file mode 100644 index 00000000..0b8f6e53 --- /dev/null +++ b/qpdf/qtest/qpdf/minimal-nulls-1.json @@ -0,0 +1,453 @@ +{ + "version": 1, + "parameters": { + "decodelevel": "generalized" + }, + "pages": [ + { + "contents": [ + "4 0 R" + ], + "images": [], + "label": null, + "object": "3 0 R", + "outlines": [], + "pageposfrom1": 1 + } + ], + "pagelabels": [], + "acroform": { + "fields": [], + "hasacroform": false, + "needappearances": false + }, + "attachments": {}, + "encrypt": { + "capabilities": { + "accessibility": true, + "extract": true, + "moddifyannotations": true, + "modify": true, + "modifyassembly": true, + "modifyforms": true, + "modifyother": true, + "printhigh": true, + "printlow": true + }, + "encrypted": false, + "ownerpasswordmatched": false, + "parameters": { + "P": 0, + "R": 0, + "V": 0, + "bits": 0, + "filemethod": "none", + "key": null, + "method": "none", + "streammethod": "none", + "stringmethod": "none" + }, + "recovereduserpassword": null, + "userpasswordmatched": false + }, + "outlines": [], + "objects": { + "1 0 R": { + "/Pages": "2 0 R", + "/Type": "/Catalog" + }, + "2 0 R": { + "/Count": 1, + "/Kids": [ + "3 0 R" + ], + "/Type": "/Pages" + }, + "3 0 R": { + "/Contents": "4 0 R", + "/MediaBox": [ + 0, + 0, + 612, + 792 + ], + "/Nulls": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "6 0 R", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "/Parent": "2 0 R", + "/Resources": { + "/Font": { + "/F1": "7 0 R" + }, + "/ProcSet": "8 0 R" + }, + "/Type": "/Page" + }, + "4 0 R": { + "/Length": "5 0 R" + }, + "5 0 R": 44, + "6 0 R": null, + "7 0 R": { + "/BaseFont": "/Helvetica", + "/Encoding": "/WinAnsiEncoding", + "/Name": "/F1", + "/Subtype": "/Type1", + "/Type": "/Font" + }, + "8 0 R": [ + "/PDF", + "/Text" + ], + "trailer": { + "/ID": [ + "ÏîgE�EMÛ‹Êߢ$²\u0005#", + "1AY&SXŠfi#—bd3…'Ł" + ], + "/Root": "1 0 R", + "/Size": 9 + } + }, + "objectinfo": { + "1 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + }, + "2 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + }, + "3 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + }, + "4 0 R": { + "stream": { + "filter": null, + "is": true, + "length": 44 + } + }, + "5 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + }, + "6 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + }, + "7 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + }, + "8 0 R": { + "stream": { + "filter": null, + "is": false, + "length": null + } + } + } +} diff --git a/qpdf/qtest/qpdf/minimal-nulls-2.json b/qpdf/qtest/qpdf/minimal-nulls-2.json new file mode 100644 index 00000000..6bf61ea7 --- /dev/null +++ b/qpdf/qtest/qpdf/minimal-nulls-2.json @@ -0,0 +1,424 @@ +{ + "version": 2, + "parameters": { + "decodelevel": "generalized" + }, + "pages": [ + { + "contents": [ + "4 0 R" + ], + "images": [], + "label": null, + "object": "3 0 R", + "outlines": [], + "pageposfrom1": 1 + } + ], + "pagelabels": [], + "acroform": { + "fields": [], + "hasacroform": false, + "needappearances": false + }, + "attachments": {}, + "encrypt": { + "capabilities": { + "accessibility": true, + "extract": true, + "modify": true, + "modifyannotations": true, + "modifyassembly": true, + "modifyforms": true, + "modifyother": true, + "printhigh": true, + "printlow": true + }, + "encrypted": false, + "ownerpasswordmatched": false, + "parameters": { + "P": 0, + "R": 0, + "V": 0, + "bits": 0, + "filemethod": "none", + "key": null, + "method": "none", + "streammethod": "none", + "stringmethod": "none" + }, + "recovereduserpassword": null, + "userpasswordmatched": false + }, + "outlines": [], + "qpdf": [ + { + "jsonversion": 2, + "pdfversion": "1.3", + "pushedinheritedpageresources": false, + "calledgetallpages": true, + "maxobjectid": 8 + }, + { + "obj:1 0 R": { + "value": { + "/Pages": "2 0 R", + "/Type": "/Catalog" + } + }, + "obj:2 0 R": { + "value": { + "/Count": 1, + "/Kids": [ + "3 0 R" + ], + "/Type": "/Pages" + } + }, + "obj:3 0 R": { + "value": { + "/Contents": "4 0 R", + "/MediaBox": [ + 0, + 0, + 612, + 792 + ], + "/Nulls": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "6 0 R", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 10, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + "/Parent": "2 0 R", + "/Resources": { + "/Font": { + "/F1": "7 0 R" + }, + "/ProcSet": "8 0 R" + }, + "/Type": "/Page" + } + }, + "obj:4 0 R": { + "stream": { + "dict": { + "/Length": "5 0 R" + } + } + }, + "obj:5 0 R": { + "value": 44 + }, + "obj:6 0 R": { + "value": null + }, + "obj:7 0 R": { + "value": { + "/BaseFont": "/Helvetica", + "/Encoding": "/WinAnsiEncoding", + "/Name": "/F1", + "/Subtype": "/Type1", + "/Type": "/Font" + } + }, + "obj:8 0 R": { + "value": [ + "/PDF", + "/Text" + ] + }, + "trailer": { + "value": { + "/ID": [ + "b:cfee6745ad454ddb88cadfa224b20523", + "b:31415926535897932384626433832795" + ], + "/Root": "1 0 R", + "/Size": 9 + } + } + } + ] +} diff --git a/qpdf/qtest/qpdf/minimal-nulls.pdf b/qpdf/qtest/qpdf/minimal-nulls.pdf new file mode 100644 index 00000000..491d0b30 --- /dev/null +++ b/qpdf/qtest/qpdf/minimal-nulls.pdf @@ -0,0 +1,387 @@ +%PDF-1.3 +% +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Nulls [ + null + null + null + null + null + null + null + null + null + null + 6 0 R + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + 10 + null + null + null + null + null + null + null + null + null + null + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 7 0 R + >> + /ProcSet 8 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +null +endobj + +7 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +8 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 9 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000002909 00000 n +0000003008 00000 n +0000003027 00000 n +0000003048 00000 n +0000003166 00000 n +trailer << + /Root 1 0 R + /Size 9 + /ID [<31415926535897932384626433832795>] +>> +startxref +3201 +%%EOF