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