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