Commit ee3682f1068fa8edc6e90b911fe2dbfa6bd7733a

Authored by Jay Berkenbilt
1 parent 1c944e4c

test_driver: accept optional second file name

This way we don't have to hard-code the name of a second file in the
test driver for tests that require one.
qpdf/qtest/qpdf.test
... ... @@ -366,7 +366,8 @@ $td->runtest("check output",
366 366 {$td->FILE => "a.pdf"},
367 367 {$td->FILE => "reserved-objects.pdf"});
368 368 $td->runtest("detect foreign object in write",
369   - {$td->COMMAND => "test_driver 29 copy-foreign-objects-in.pdf"},
  369 + {$td->COMMAND => "test_driver 29" .
  370 + " copy-foreign-objects-in.pdf minimal.pdf"},
370 371 {$td->FILE => "foreign-in-write.out", $td->EXIT_STATUS => 0},
371 372 $td->NORMALIZE_NEWLINES);
372 373  
... ... @@ -391,7 +392,7 @@ foreach my $d ([25, 1], [26, 2], [27, 3])
391 392 my ($testn, $outn) = @$d;
392 393 $td->runtest("copy objects $outn",
393 394 {$td->COMMAND => "test_driver $testn" .
394   - " copy-foreign-objects-in.pdf"},
  395 + " copy-foreign-objects-in.pdf minimal.pdf"},
395 396 {$td->STRING => "test $testn done\n", $td->EXIT_STATUS => 0},
396 397 $td->NORMALIZE_NEWLINES);
397 398 $td->runtest("check output",
... ... @@ -399,7 +400,8 @@ foreach my $d ([25, 1], [26, 2], [27, 3])
399 400 {$td->FILE => "copy-foreign-objects-out$outn.pdf"});
400 401 }
401 402 $td->runtest("copy objects error",
402   - {$td->COMMAND => "test_driver 28 copy-foreign-objects-in.pdf"},
  403 + {$td->COMMAND => "test_driver 28" .
  404 + " copy-foreign-objects-in.pdf minimal.pdf"},
403 405 {$td->FILE => "copy-foreign-objects-errors.out",
404 406 $td->EXIT_STATUS => 0},
405 407 $td->NORMALIZE_NEWLINES);
... ...
qpdf/test_driver.cc
... ... @@ -21,7 +21,8 @@ static char const* whoami = 0;
21 21  
22 22 void usage()
23 23 {
24   - std::cerr << "Usage: " << whoami << " n filename" << std::endl;
  24 + std::cerr << "Usage: " << whoami << " n filename1 [filename2]"
  25 + << std::endl;
25 26 exit(2);
26 27 }
27 28  
... ... @@ -76,7 +77,7 @@ static QPDFObjectHandle createPageContents(QPDF&amp; pdf, std::string const&amp; text)
76 77 return QPDFObjectHandle::newStream(&pdf, contents);
77 78 }
78 79  
79   -void runtest(int n, char const* filename)
  80 +void runtest(int n, char const* filename1, char const* filename2)
80 81 {
81 82 // Most tests here are crafted to work on specific files. Look at
82 83 // the test suite to see how the test is invoked to find the file
... ... @@ -94,21 +95,21 @@ void runtest(int n, char const* filename)
94 95 if (n % 4 == 0)
95 96 {
96 97 QTC::TC("qpdf", "exercise processFile(name)");
97   - pdf.processFile(filename);
  98 + pdf.processFile(filename1);
98 99 }
99 100 else
100 101 {
101 102 QTC::TC("qpdf", "exercise processFile(FILE*)");
102   - filep = QUtil::fopen_wrapper(std::string("open ") + filename,
103   - fopen(filename, "rb"));
104   - pdf.processFile(filename, filep, false);
  103 + filep = QUtil::fopen_wrapper(std::string("open ") + filename1,
  104 + fopen(filename1, "rb"));
  105 + pdf.processFile(filename1, filep, false);
105 106 }
106 107 }
107 108 else
108 109 {
109 110 QTC::TC("qpdf", "exercise processMemoryFile");
110   - FILE* f = QUtil::fopen_wrapper(std::string("open ") + filename,
111   - fopen(filename, "rb"));
  111 + FILE* f = QUtil::fopen_wrapper(std::string("open ") + filename1,
  112 + fopen(filename1, "rb"));
112 113 fseek(f, 0, SEEK_END);
113 114 size_t size = (size_t) QUtil::tell(f);
114 115 fseek(f, 0, SEEK_SET);
... ... @@ -125,7 +126,7 @@ void runtest(int n, char const* filename)
125 126 if (ferror(f))
126 127 {
127 128 throw std::runtime_error(
128   - std::string("failure reading file ") + filename +
  129 + std::string("failure reading file ") + filename1 +
129 130 " into memory: read " +
130 131 QUtil::int_to_string(bytes_read) + "; wanted " +
131 132 QUtil::int_to_string(size));
... ... @@ -133,14 +134,14 @@ void runtest(int n, char const* filename)
133 134 else
134 135 {
135 136 throw std::logic_error(
136   - std::string("premature eof reading file ") + filename +
  137 + std::string("premature eof reading file ") + filename1 +
137 138 " into memory: read " +
138 139 QUtil::int_to_string(bytes_read) + "; wanted " +
139 140 QUtil::int_to_string(size));
140 141 }
141 142 }
142 143 fclose(f);
143   - pdf.processMemoryFile(filename, buf_p, size);
  144 + pdf.processMemoryFile(filename1, buf_p, size);
144 145 }
145 146  
146 147 if ((n == 0) || (n == 1))
... ... @@ -925,8 +926,9 @@ void runtest(int n, char const* filename)
925 926 // Copy qtest without crossing page boundaries. Should get O1
926 927 // and O2 and their streams but not O3 or any other pages.
927 928  
  929 + assert(filename2 != 0);
928 930 QPDF newpdf;
929   - newpdf.processFile("minimal.pdf");
  931 + newpdf.processFile(filename2);
930 932 QPDFObjectHandle qtest = pdf.getTrailer().getKey("/QTest");
931 933 newpdf.getTrailer().replaceKey(
932 934 "/QTest", newpdf.copyForeignObject(qtest));
... ... @@ -944,8 +946,9 @@ void runtest(int n, char const* filename)
944 946 // that O3 points to. Also, inherited object will have been
945 947 // pushed down and will be preserved.
946 948  
  949 + assert(filename2 != 0);
947 950 QPDF newpdf;
948   - newpdf.processFile("minimal.pdf");
  951 + newpdf.processFile(filename2);
949 952 QPDFObjectHandle qtest = pdf.getTrailer().getKey("/QTest");
950 953 QPDFObjectHandle O3 = qtest.getKey("/O3");
951 954 newpdf.addPage(O3, false);
... ... @@ -963,8 +966,9 @@ void runtest(int n, char const* filename)
963 966 // Should get qtest plus only the O3 page and the page that O3
964 967 // points to. Inherited objects should be preserved.
965 968  
  969 + assert(filename2 != 0);
966 970 QPDF newpdf;
967   - newpdf.processFile("minimal.pdf");
  971 + newpdf.processFile(filename2);
968 972 QPDFObjectHandle qtest = pdf.getTrailer().getKey("/QTest");
969 973 QPDFObjectHandle O3 = qtest.getKey("/O3");
970 974 newpdf.addPage(O3.getKey("/OtherPage"), false);
... ... @@ -1002,8 +1006,9 @@ void runtest(int n, char const* filename)
1002 1006 else if (n == 29)
1003 1007 {
1004 1008 // Detect mixed objects in QPDFWriter
  1009 + assert(filename2 != 0);
1005 1010 QPDF other;
1006   - other.processFile("minimal.pdf");
  1011 + other.processFile(filename2);
1007 1012 // Should use copyForeignObject instead
1008 1013 other.getTrailer().replaceKey(
1009 1014 "/QTest", pdf.getTrailer().getKey("/QTest"));
... ... @@ -1049,7 +1054,7 @@ int main(int argc, char* argv[])
1049 1054 whoami += 3;
1050 1055 }
1051 1056  
1052   - if (argc != 3)
  1057 + if ((argc < 3) || (argc > 4))
1053 1058 {
1054 1059 usage();
1055 1060 }
... ... @@ -1057,8 +1062,9 @@ int main(int argc, char* argv[])
1057 1062 try
1058 1063 {
1059 1064 int n = atoi(argv[1]);
1060   - char const* filename = argv[2];
1061   - runtest(n, filename);
  1065 + char const* filename1 = argv[2];
  1066 + char const* filename2 = argv[3];
  1067 + runtest(n, filename1, filename2);
1062 1068 }
1063 1069 catch (std::exception& e)
1064 1070 {
... ...