1 #include <QtTest/QtTest>
2
3 #include <poppler-qt5.h>
4
5 class TestMetaData : public QObject
6 {
7 Q_OBJECT
8 public:
TestMetaData(QObject * parent=nullptr)9 explicit TestMetaData(QObject *parent = nullptr) : QObject(parent) { }
10 private slots:
11 void checkStrings_data();
12 void checkStrings();
13 void checkStrings2_data();
14 void checkStrings2();
15 void checkStringKeys();
16 void checkLinearised();
17 void checkNumPages();
18 void checkDate();
19 void checkPageSize();
20 void checkPortraitOrientation();
21 void checkLandscapeOrientation();
22 void checkUpsideDownOrientation();
23 void checkSeascapeOrientation();
24 void checkVersion();
25 void checkPdfId();
26 void checkNoPdfId();
27 };
28
checkStrings_data()29 void TestMetaData::checkStrings_data()
30 {
31 QTest::addColumn<QString>("key");
32 QTest::addColumn<QString>("value");
33
34 QTest::newRow("Author") << "Author"
35 << "Brad Hards";
36 QTest::newRow("Title") << "Title"
37 << "Two pages";
38 QTest::newRow("Subject") << "Subject"
39 << "A two page layout for poppler testing";
40 QTest::newRow("Keywords") << "Keywords"
41 << "Qt4 bindings";
42 QTest::newRow("Creator") << "Creator"
43 << "iText: cgpdftops CUPS filter";
44 QTest::newRow("Producer") << "Producer"
45 << "Acrobat Distiller 7.0 for Macintosh";
46 }
47
checkStrings()48 void TestMetaData::checkStrings()
49 {
50 Poppler::Document *doc;
51 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf");
52 QVERIFY(doc);
53
54 QFETCH(QString, key);
55 QFETCH(QString, value);
56 QCOMPARE(doc->info(key), value);
57
58 delete doc;
59 }
60
checkStrings2_data()61 void TestMetaData::checkStrings2_data()
62 {
63 QTest::addColumn<QString>("key");
64 QTest::addColumn<QString>("value");
65
66 QTest::newRow("Title") << "Title"
67 << "Malaga hotels";
68 QTest::newRow("Author") << "Author"
69 << "Brad Hards";
70 QTest::newRow("Creator") << "Creator"
71 << "Safari: cgpdftops CUPS filter";
72 QTest::newRow("Producer") << "Producer"
73 << "Acrobat Distiller 7.0 for Macintosh";
74 QTest::newRow("Keywords") << "Keywords"
75 << "First\rSecond\rthird";
76 QTest::newRow("Custom1") << "Custom1"
77 << "CustomValue1";
78 QTest::newRow("Custom2") << "Custom2"
79 << "CustomValue2";
80 }
81
checkStrings2()82 void TestMetaData::checkStrings2()
83 {
84 Poppler::Document *doc;
85 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
86 QVERIFY(doc);
87
88 QFETCH(QString, key);
89 QFETCH(QString, value);
90 QCOMPARE(doc->info(key), value);
91
92 delete doc;
93 }
94
checkStringKeys()95 void TestMetaData::checkStringKeys()
96 {
97 Poppler::Document *doc;
98 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
99 QVERIFY(doc);
100
101 QStringList keyList;
102 keyList << QStringLiteral("Title") << QStringLiteral("Author") << QStringLiteral("Creator") << QStringLiteral("Keywords") << QStringLiteral("CreationDate");
103 keyList << QStringLiteral("Producer") << QStringLiteral("ModDate") << QStringLiteral("Custom1") << QStringLiteral("Custom2");
104 keyList.sort();
105 QStringList keysInDoc = doc->infoKeys();
106 keysInDoc.sort();
107 QCOMPARE(keysInDoc, keyList);
108
109 delete doc;
110 }
111
checkLinearised()112 void TestMetaData::checkLinearised()
113 {
114 Poppler::Document *doc;
115 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
116 QVERIFY(doc);
117
118 QVERIFY(doc->isLinearized());
119
120 delete doc;
121
122 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
123 QVERIFY(doc);
124 QCOMPARE(doc->isLinearized(), false);
125
126 delete doc;
127 }
128
checkPortraitOrientation()129 void TestMetaData::checkPortraitOrientation()
130 {
131 Poppler::Document *doc;
132 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
133 QVERIFY(doc);
134
135 Poppler::Page *page = doc->page(0);
136 QCOMPARE(page->orientation(), Poppler::Page::Portrait);
137
138 delete page;
139 delete doc;
140 }
141
checkNumPages()142 void TestMetaData::checkNumPages()
143 {
144 Poppler::Document *doc;
145 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf");
146 QVERIFY(doc);
147 QCOMPARE(doc->numPages(), 2);
148
149 delete doc;
150
151 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
152 QVERIFY(doc);
153 QCOMPARE(doc->numPages(), 1);
154
155 delete doc;
156 }
157
checkDate()158 void TestMetaData::checkDate()
159 {
160 Poppler::Document *doc;
161
162 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
163 QVERIFY(doc);
164 QCOMPARE(doc->date(QStringLiteral("ModDate")), QDateTime(QDate(2005, 12, 5), QTime(9, 44, 46), Qt::UTC));
165 QCOMPARE(doc->date(QStringLiteral("CreationDate")), QDateTime(QDate(2005, 8, 13), QTime(1, 12, 11), Qt::UTC));
166
167 delete doc;
168 }
169
checkPageSize()170 void TestMetaData::checkPageSize()
171 {
172 Poppler::Document *doc;
173
174 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
175 QVERIFY(doc);
176 Poppler::Page *page = doc->page(0);
177 QCOMPARE(page->pageSize(), QSize(595, 842));
178 QCOMPARE(page->pageSizeF(), QSizeF(595.22, 842));
179
180 delete page;
181 delete doc;
182 }
183
checkLandscapeOrientation()184 void TestMetaData::checkLandscapeOrientation()
185 {
186 Poppler::Document *doc;
187 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
188 QVERIFY(doc);
189
190 Poppler::Page *page = doc->page(1);
191 QCOMPARE(page->orientation(), Poppler::Page::Landscape);
192
193 delete page;
194 delete doc;
195 }
196
checkUpsideDownOrientation()197 void TestMetaData::checkUpsideDownOrientation()
198 {
199 Poppler::Document *doc;
200 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
201 QVERIFY(doc);
202
203 Poppler::Page *page = doc->page(2);
204 QCOMPARE(page->orientation(), Poppler::Page::UpsideDown);
205
206 delete page;
207 delete doc;
208 }
209
checkSeascapeOrientation()210 void TestMetaData::checkSeascapeOrientation()
211 {
212 Poppler::Document *doc;
213 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
214 QVERIFY(doc);
215
216 Poppler::Page *page = doc->page(3);
217 QCOMPARE(page->orientation(), Poppler::Page::Seascape);
218
219 delete page;
220 delete doc;
221 }
222
checkVersion()223 void TestMetaData::checkVersion()
224 {
225 Poppler::Document *doc;
226 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf");
227 QVERIFY(doc);
228
229 auto pdfVersion = doc->getPdfVersion();
230 QCOMPARE(pdfVersion.major, 1);
231 QCOMPARE(pdfVersion.minor, 6);
232
233 delete doc;
234 }
235
checkPdfId()236 void TestMetaData::checkPdfId()
237 {
238 Poppler::Document *doc;
239 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/A6EmbeddedFiles.pdf");
240 QVERIFY(doc);
241
242 const QByteArray referencePermanentId("00C9D5B6D8FB11D7A902003065D630AA");
243 const QByteArray referenceUpdateId("39AECAE6D8FB11D7A902003065D630AA");
244
245 {
246 // no IDs wanted, just existance check
247 QVERIFY(doc->getPdfId(nullptr, nullptr));
248 }
249 {
250 // only permanent ID
251 QByteArray permanentId;
252 QVERIFY(doc->getPdfId(&permanentId, nullptr));
253 QCOMPARE(permanentId.toUpper(), referencePermanentId);
254 }
255 {
256 // only update ID
257 QByteArray updateId;
258 QVERIFY(doc->getPdfId(nullptr, &updateId));
259 QCOMPARE(updateId.toUpper(), referenceUpdateId);
260 }
261 {
262 // both IDs
263 QByteArray permanentId;
264 QByteArray updateId;
265 QVERIFY(doc->getPdfId(&permanentId, &updateId));
266 QCOMPARE(permanentId.toUpper(), referencePermanentId);
267 QCOMPARE(updateId.toUpper(), referenceUpdateId);
268 }
269
270 delete doc;
271 }
272
checkNoPdfId()273 void TestMetaData::checkNoPdfId()
274 {
275 Poppler::Document *doc;
276 doc = Poppler::Document::load(TESTDATADIR "/unittestcases/WithActualText.pdf");
277 QVERIFY(doc);
278
279 QVERIFY(!doc->getPdfId(nullptr, nullptr));
280
281 delete doc;
282 }
283
284 QTEST_GUILESS_MAIN(TestMetaData)
285 #include "check_metadata.moc"
286