mirror of
https://github.com/qpdf/qpdf.git
synced 2025-02-08 22:58:25 +00:00
Tests with manually constructed qpdf json
This commit is contained in:
parent
7f8c4b183d
commit
a83b7b0611
4
TODO
4
TODO
@ -97,10 +97,6 @@ General things to remember:
|
|||||||
|
|
||||||
* Add json to the large file tests.
|
* Add json to the large file tests.
|
||||||
|
|
||||||
* Object representation tests
|
|
||||||
* "b:cf80", "b:CF80", "u:π", "u:\u03c0"
|
|
||||||
* "b:d83edd54", "u:🥔", "u:\ud83e\udd54"
|
|
||||||
|
|
||||||
JSON to PDF:
|
JSON to PDF:
|
||||||
|
|
||||||
Have --json-input and --update-from-json. With --json-input, the json
|
Have --json-input and --update-from-json. With --json-input, the json
|
||||||
|
@ -67,30 +67,30 @@ foreach my $i (@goodfiles)
|
|||||||
if (ref($i) eq 'ARRAY') {
|
if (ref($i) eq 'ARRAY') {
|
||||||
($f, $xargs) = @$i;
|
($f, $xargs) = @$i;
|
||||||
}
|
}
|
||||||
$td->runtest("good: $f -> json",
|
$td->runtest("good: $f -> JSON",
|
||||||
{$td->COMMAND => "qpdf $xargs --decode-level=none" .
|
{$td->COMMAND => "qpdf $xargs --decode-level=none" .
|
||||||
" --json-output=latest $f a.json"},
|
" --json-output=latest $f a.json"},
|
||||||
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
$td->runtest("good: $f json -> json",
|
$td->runtest("good: $f JSON -> JSON",
|
||||||
{$td->COMMAND =>
|
{$td->COMMAND =>
|
||||||
"qpdf --decode-level=none" .
|
"qpdf --decode-level=none" .
|
||||||
" --json-input --json-output=latest a.json b.json"},
|
" --json-input --json-output=latest a.json b.json"},
|
||||||
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
$td->runtest("good: $f json -> qdf",
|
$td->runtest("good: $f JSON -> QDF",
|
||||||
{$td->COMMAND =>
|
{$td->COMMAND =>
|
||||||
"qpdf --qdf --json-input --stream-data=preserve" .
|
"qpdf --qdf --json-input --stream-data=preserve" .
|
||||||
" --static-id a.json a.pdf"},
|
" --static-id a.json a.pdf"},
|
||||||
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
$td->runtest("good: $f compare json",
|
$td->runtest("good: $f compare JSON",
|
||||||
{$td->FILE => "a.json"},
|
{$td->FILE => "a.json"},
|
||||||
{$td->FILE => "b.json"});
|
{$td->FILE => "b.json"});
|
||||||
my $exp = "json-changed-$f";
|
my $exp = "json-changed-$f";
|
||||||
if (! -f $exp)
|
if (! -f $exp)
|
||||||
{
|
{
|
||||||
$td->runtest("good: $f -> qdf",
|
$td->runtest("good: $f -> aqdf",
|
||||||
{$td->COMMAND =>
|
{$td->COMMAND =>
|
||||||
"qpdf $xargs --object-streams=disable --qdf" .
|
"qpdf $xargs --object-streams=disable --qdf" .
|
||||||
" --stream-data=preserve --static-id $f b.pdf"},
|
" --stream-data=preserve --static-id $f b.pdf"},
|
||||||
@ -115,7 +115,34 @@ foreach my $i (@goodfiles)
|
|||||||
{$td->FILE => $exp}); # from original PDF
|
{$td->FILE => $exp}); # from original PDF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$n_tests += 6;
|
||||||
|
$td->runtest("manual JSON to PDF",
|
||||||
|
{$td->COMMAND => "qpdf --json-input --static-id --qdf" .
|
||||||
|
" manual-qpdf-json.json a.pdf"},
|
||||||
|
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
$td->runtest("check manual JSON to PDF",
|
||||||
|
{$td->FILE => "a.pdf"},
|
||||||
|
{$td->FILE => "manual-qpdf-json.pdf"});
|
||||||
|
$td->runtest("check manual JSON to PDF to JSON",
|
||||||
|
{$td->COMMAND => "qpdf --json-output=2 a.pdf -"},
|
||||||
|
{$td->FILE => "manual-qpdf-json-pdf.json", $td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
$td->runtest("manual JSON to JSON",
|
||||||
|
{$td->COMMAND => "qpdf --json-input --json-output=2" .
|
||||||
|
" manual-qpdf-json.json a.json"},
|
||||||
|
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
$td->runtest("check manual JSON to JSON",
|
||||||
|
{$td->FILE => "a.json"},
|
||||||
|
{$td->FILE => "manual-qpdf-json-out.json"},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
$td->runtest("check manual JSON to JSON to JSON",
|
||||||
|
{$td->COMMAND => "qpdf --json-output=2 --json-input a.json -"},
|
||||||
|
{$td->FILE => "a.json", $td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
|
# QXXXQ file
|
||||||
|
|
||||||
cleanup();
|
cleanup();
|
||||||
$td->report($n_tests);
|
$td->report($n_tests);
|
||||||
|
133
qpdf/qtest/qpdf/manual-qpdf-json-out.json
Normal file
133
qpdf/qtest/qpdf/manual-qpdf-json-out.json
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
{
|
||||||
|
"qpdf-v2": {
|
||||||
|
"pdfversion": "2.0",
|
||||||
|
"maxobjectid": 8,
|
||||||
|
"objects": {
|
||||||
|
"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
|
||||||
|
],
|
||||||
|
"/Parent": "2 0 R",
|
||||||
|
"/Resources": {
|
||||||
|
"/Font": {
|
||||||
|
"/F1": "6 0 R"
|
||||||
|
},
|
||||||
|
"/ProcSet": "5 0 R"
|
||||||
|
},
|
||||||
|
"/Type": "/Page"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:4 0 R": {
|
||||||
|
"stream": {
|
||||||
|
"data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=",
|
||||||
|
"dict": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:5 0 R": {
|
||||||
|
"value": [
|
||||||
|
"/PDF",
|
||||||
|
"/Text"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"obj:6 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/BaseFont": "/Helvetica",
|
||||||
|
"/Encoding": "/WinAnsiEncoding",
|
||||||
|
"/Name": "/F1",
|
||||||
|
"/Subtype": "/Type1",
|
||||||
|
"/Type": "/Font"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:7 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/hex strings": [
|
||||||
|
"u:Potato",
|
||||||
|
"b:01020300040560",
|
||||||
|
"u:AB"
|
||||||
|
],
|
||||||
|
"/indirect": "8 0 R",
|
||||||
|
"/names": [
|
||||||
|
"/nesting",
|
||||||
|
"/hex strings",
|
||||||
|
"/text/plain"
|
||||||
|
],
|
||||||
|
"/nesting": {
|
||||||
|
"/a": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
{
|
||||||
|
"/x": "u:y"
|
||||||
|
},
|
||||||
|
[
|
||||||
|
"u:z"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"/b": {
|
||||||
|
"/": "u:legal",
|
||||||
|
"/a": [
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/strings": [
|
||||||
|
"u:one",
|
||||||
|
"b:24a2",
|
||||||
|
"u:",
|
||||||
|
"u:()",
|
||||||
|
"u:(",
|
||||||
|
"u:)",
|
||||||
|
"u:a\f\b\t\r\nb",
|
||||||
|
"u:\"",
|
||||||
|
"u:\"\"",
|
||||||
|
"u:\"(\")\"",
|
||||||
|
"b:410042",
|
||||||
|
"u:a\nb",
|
||||||
|
"u:a b",
|
||||||
|
[
|
||||||
|
"u:π",
|
||||||
|
"u:π",
|
||||||
|
"u:π",
|
||||||
|
"u:π"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"u:🥔",
|
||||||
|
"u:🥔",
|
||||||
|
"u:🥔"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:8 0 R": {
|
||||||
|
"value": "u:hello"
|
||||||
|
},
|
||||||
|
"trailer": {
|
||||||
|
"value": {
|
||||||
|
"/QTest": "7 0 R",
|
||||||
|
"/Root": "1 0 R",
|
||||||
|
"/Size": 9
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
140
qpdf/qtest/qpdf/manual-qpdf-json-pdf.json
Normal file
140
qpdf/qtest/qpdf/manual-qpdf-json-pdf.json
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"qpdf-v2": {
|
||||||
|
"pdfversion": "2.0",
|
||||||
|
"maxobjectid": 9,
|
||||||
|
"objects": {
|
||||||
|
"obj:1 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/Pages": "3 0 R",
|
||||||
|
"/Type": "/Catalog"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:2 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/hex strings": [
|
||||||
|
"u:Potato",
|
||||||
|
"b:01020300040560",
|
||||||
|
"u:AB"
|
||||||
|
],
|
||||||
|
"/indirect": "4 0 R",
|
||||||
|
"/names": [
|
||||||
|
"/nesting",
|
||||||
|
"/hex strings",
|
||||||
|
"/text/plain"
|
||||||
|
],
|
||||||
|
"/nesting": {
|
||||||
|
"/a": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
{
|
||||||
|
"/x": "u:y"
|
||||||
|
},
|
||||||
|
[
|
||||||
|
"u:z"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"/b": {
|
||||||
|
"/": "u:legal",
|
||||||
|
"/a": [
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/strings": [
|
||||||
|
"u:one",
|
||||||
|
"b:24a2",
|
||||||
|
"u:",
|
||||||
|
"u:()",
|
||||||
|
"u:(",
|
||||||
|
"u:)",
|
||||||
|
"u:a\f\b\t\r\nb",
|
||||||
|
"u:\"",
|
||||||
|
"u:\"\"",
|
||||||
|
"u:\"(\")\"",
|
||||||
|
"b:410042",
|
||||||
|
"u:a\nb",
|
||||||
|
"u:a b",
|
||||||
|
[
|
||||||
|
"u:π",
|
||||||
|
"u:π",
|
||||||
|
"u:π",
|
||||||
|
"u:π"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"u:🥔",
|
||||||
|
"u:🥔",
|
||||||
|
"u:🥔"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:3 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/Count": 1,
|
||||||
|
"/Kids": [
|
||||||
|
"5 0 R"
|
||||||
|
],
|
||||||
|
"/Type": "/Pages"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:4 0 R": {
|
||||||
|
"value": "u:hello"
|
||||||
|
},
|
||||||
|
"obj:5 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/Contents": "6 0 R",
|
||||||
|
"/MediaBox": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
612,
|
||||||
|
792
|
||||||
|
],
|
||||||
|
"/Parent": "3 0 R",
|
||||||
|
"/Resources": {
|
||||||
|
"/Font": {
|
||||||
|
"/F1": "8 0 R"
|
||||||
|
},
|
||||||
|
"/ProcSet": "9 0 R"
|
||||||
|
},
|
||||||
|
"/Type": "/Page"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:6 0 R": {
|
||||||
|
"stream": {
|
||||||
|
"data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=",
|
||||||
|
"dict": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:7 0 R": {
|
||||||
|
"value": 44
|
||||||
|
},
|
||||||
|
"obj:8 0 R": {
|
||||||
|
"value": {
|
||||||
|
"/BaseFont": "/Helvetica",
|
||||||
|
"/Encoding": "/WinAnsiEncoding",
|
||||||
|
"/Name": "/F1",
|
||||||
|
"/Subtype": "/Type1",
|
||||||
|
"/Type": "/Font"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"obj:9 0 R": {
|
||||||
|
"value": [
|
||||||
|
"/PDF",
|
||||||
|
"/Text"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"trailer": {
|
||||||
|
"value": {
|
||||||
|
"/ID": [
|
||||||
|
"b:31415926535897932384626433832795",
|
||||||
|
"b:31415926535897932384626433832795"
|
||||||
|
],
|
||||||
|
"/QTest": "2 0 R",
|
||||||
|
"/Root": "1 0 R",
|
||||||
|
"/Size": 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -104,11 +104,14 @@
|
|||||||
"u:(",
|
"u:(",
|
||||||
"u:)",
|
"u:)",
|
||||||
"u:a\f\b\t\r\nb",
|
"u:a\f\b\t\r\nb",
|
||||||
|
"u:\"",
|
||||||
|
"u:\"\"",
|
||||||
|
"u:\"(\")\"",
|
||||||
"b:410042",
|
"b:410042",
|
||||||
"u:a\nb",
|
"u:a\nb",
|
||||||
"u:a b",
|
"u:a b",
|
||||||
"u:π",
|
["u:π", "u:\u03c0", "b:EFBBBFCF80", "b:feff03c0"],
|
||||||
"u:🥔"
|
["u:🥔", "u:\ud83e\udd54", "b:feffd83eDD54"]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
171
qpdf/qtest/qpdf/manual-qpdf-json.pdf
Normal file
171
qpdf/qtest/qpdf/manual-qpdf-json.pdf
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
%PDF-2.0
|
||||||
|
%¿÷¢þ
|
||||||
|
%QDF-1.0
|
||||||
|
|
||||||
|
%% Original object ID: 1 0
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/Pages 3 0 R
|
||||||
|
/Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Original object ID: 7 0
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/hex#20strings [
|
||||||
|
(Potato)
|
||||||
|
<01020300040560>
|
||||||
|
(AB)
|
||||||
|
]
|
||||||
|
/indirect 4 0 R
|
||||||
|
/names [
|
||||||
|
/nesting
|
||||||
|
/hex#20strings
|
||||||
|
/text#2fplain
|
||||||
|
]
|
||||||
|
/nesting <<
|
||||||
|
/a [
|
||||||
|
1
|
||||||
|
2
|
||||||
|
<<
|
||||||
|
/x (y)
|
||||||
|
>>
|
||||||
|
[
|
||||||
|
(z)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
/b <<
|
||||||
|
/ (legal)
|
||||||
|
/a [
|
||||||
|
1
|
||||||
|
2
|
||||||
|
]
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
/strings [
|
||||||
|
(one)
|
||||||
|
<24a2>
|
||||||
|
()
|
||||||
|
(\(\))
|
||||||
|
(\()
|
||||||
|
(\))
|
||||||
|
(a\f\b\t\r\nb)
|
||||||
|
(")
|
||||||
|
("")
|
||||||
|
("\("\)")
|
||||||
|
<410042>
|
||||||
|
(a\nb)
|
||||||
|
(a b)
|
||||||
|
[
|
||||||
|
<feff03c0>
|
||||||
|
<feff03c0>
|
||||||
|
<efbbbfcf80>
|
||||||
|
<feff03c0>
|
||||||
|
]
|
||||||
|
[
|
||||||
|
<feffd83edd54>
|
||||||
|
<feffd83edd54>
|
||||||
|
<feffd83edd54>
|
||||||
|
]
|
||||||
|
]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Original object ID: 2 0
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/Count 1
|
||||||
|
/Kids [
|
||||||
|
5 0 R
|
||||||
|
]
|
||||||
|
/Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Original object ID: 8 0
|
||||||
|
4 0 obj
|
||||||
|
(hello)
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Page 1
|
||||||
|
%% Original object ID: 3 0
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 6 0 R
|
||||||
|
/MediaBox [
|
||||||
|
0
|
||||||
|
0
|
||||||
|
612
|
||||||
|
792
|
||||||
|
]
|
||||||
|
/Parent 3 0 R
|
||||||
|
/Resources <<
|
||||||
|
/Font <<
|
||||||
|
/F1 8 0 R
|
||||||
|
>>
|
||||||
|
/ProcSet 9 0 R
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Contents for page 1
|
||||||
|
%% Original object ID: 4 0
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Length 7 0 R
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
BT
|
||||||
|
/F1 24 Tf
|
||||||
|
72 720 Td
|
||||||
|
(Potato) Tj
|
||||||
|
ET
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
|
||||||
|
7 0 obj
|
||||||
|
44
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Original object ID: 6 0
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/Name /F1
|
||||||
|
/Subtype /Type1
|
||||||
|
/Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
%% Original object ID: 5 0
|
||||||
|
9 0 obj
|
||||||
|
[
|
||||||
|
/PDF
|
||||||
|
/Text
|
||||||
|
]
|
||||||
|
endobj
|
||||||
|
|
||||||
|
xref
|
||||||
|
0 10
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000052 00000 n
|
||||||
|
0000000133 00000 n
|
||||||
|
0000000829 00000 n
|
||||||
|
0000000928 00000 n
|
||||||
|
0000000989 00000 n
|
||||||
|
0000001231 00000 n
|
||||||
|
0000001330 00000 n
|
||||||
|
0000001376 00000 n
|
||||||
|
0000001521 00000 n
|
||||||
|
trailer <<
|
||||||
|
/QTest 2 0 R
|
||||||
|
/Root 1 0 R
|
||||||
|
/Size 10
|
||||||
|
/ID [<31415926535897932384626433832795><31415926535897932384626433832795>]
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
1556
|
||||||
|
%%EOF
|
Loading…
x
Reference in New Issue
Block a user