2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 00:10:54 +00:00

Add additional page API test cases

This commit is contained in:
Jay Berkenbilt 2012-06-21 15:27:32 -04:00
parent ba61c3aef0
commit 1b364ad7b8
4 changed files with 176 additions and 1 deletions

View File

@ -111,7 +111,7 @@ $td->runtest("new stream",
show_ntests();
# ----------
$td->notify("--- Page API Tests ---");
$n_tests += 5;
$n_tests += 8;
$td->runtest("basic page API",
{$td->COMMAND => "test_driver 15 page_api_1.pdf"},
@ -131,6 +131,17 @@ $td->runtest("duplicate page",
{$td->COMMAND => "test_driver 17 page_api_2.pdf"},
{$td->FILE => "page_api_2.out", $td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
$td->runtest("delete and re-add a page",
{$td->COMMAND => "test_driver 18 page_api_1.pdf"},
{$td->STRING => "test 18 done\n", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "page_api_1-out3.pdf"});
$td->runtest("duplicate page",
{$td->COMMAND => "test_driver 19 page_api_1.pdf"},
{$td->FILE => "page_api_1.out", $td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
# ----------
$td->notify("--- Miscellaneous Tests ---");
$n_tests += 37;

View File

@ -0,0 +1,135 @@
%PDF-1.3
%¿÷¢þ
1 0 obj
<< /Pages 3 0 R /Type /Catalog >>
endobj
2 0 obj
<< /CreationDate (D:20120621111522) /Producer (Apex PDFWriter) >>
endobj
3 0 obj
<< /Count 10 /Kids [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R ] /Type /Pages >>
endobj
4 0 obj
<< /Contents 14 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
5 0 obj
<< /Contents 16 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
6 0 obj
<< /Contents 17 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
7 0 obj
<< /Contents 18 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
8 0 obj
<< /Contents 19 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
9 0 obj
<< /Contents 20 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
10 0 obj
<< /Contents 21 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
11 0 obj
<< /Contents 22 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
12 0 obj
<< /Contents 23 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
13 0 obj
<< /Contents 24 0 R /MediaBox [ 0 0 612 792 ] /Parent 3 0 R /Resources << /Font << /F1 15 0 R >> /ProcSet [ /PDF /Text ] >> /Type /Page >>
endobj
14 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 0) Tj ET
endstream
endobj
15 0 obj
<< /BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Subtype /Type1 /Type /Font >>
endobj
16 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 1) Tj ET
endstream
endobj
17 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 2) Tj ET
endstream
endobj
18 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 3) Tj ET
endstream
endobj
19 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 4) Tj ET
endstream
endobj
20 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 6) Tj ET
endstream
endobj
21 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 7) Tj ET
endstream
endobj
22 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 8) Tj ET
endstream
endobj
23 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 9) Tj ET
endstream
endobj
24 0 obj
<< /Length 47 >>
stream
BT /F1 15 Tf 72 720 Td (Original page 5) Tj ET
endstream
endobj
xref
0 25
0000000000 65535 f
0000000015 00000 n
0000000064 00000 n
0000000145 00000 n
0000000263 00000 n
0000000417 00000 n
0000000571 00000 n
0000000725 00000 n
0000000879 00000 n
0000001033 00000 n
0000001187 00000 n
0000001342 00000 n
0000001497 00000 n
0000001652 00000 n
0000001807 00000 n
0000001904 00000 n
0000002004 00000 n
0000002101 00000 n
0000002198 00000 n
0000002295 00000 n
0000002392 00000 n
0000002489 00000 n
0000002586 00000 n
0000002683 00000 n
0000002780 00000 n
trailer << /Info 2 0 R /Root 1 0 R /Size 25 /ID [<21f7a6fb083dab8e29743918a08bfa31><31415926535897932384626433832795>] >>
startxref
2877
%%EOF

View File

@ -0,0 +1 @@
page_api_1.pdf (page 10 (numbered from zero): object 9 0): duplicate page reference found; this would cause loss of data

View File

@ -779,6 +779,34 @@ void runtest(int n, char const* filename)
pdf.removePage(pages[0]);
std::cout << "you can't see this" << std::endl;
}
else if (n == 18)
{
// Remove a page and re-insert it in the same file.
std::vector<QPDFObjectHandle> const& pages = pdf.getAllPages();
// Remove pages from various places, checking to make sure
// that our pages reference is getting updated.
assert(pages.size() == 10);
QPDFObjectHandle page5 = pages[5];
pdf.removePage(page5);
pdf.addPage(page5, false);
assert(pages.size() == 10);
assert(pages.back().getObjectID() == page5.getObjectID());
QPDFWriter w(pdf, "a.pdf");
w.setStaticID(true);
w.setStreamDataMode(qpdf_s_preserve);
w.write();
}
else if (n == 19)
{
// Remove a page and re-insert it in the same file.
std::vector<QPDFObjectHandle> const& pages = pdf.getAllPages();
// Try to insert a page that's already there.
pdf.addPage(pages[5], false);
std::cout << "you can't see this" << std::endl;
}
else
{
throw std::runtime_error(std::string("invalid test ") +