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