blob: 1e5875c84dd07719547629128579cabf8429e144 [file] [log] [blame]
#include <QtTest/QtTest>
#include <poppler-qt5.h>
class TestMetaData: public QObject
{
Q_OBJECT
public:
TestMetaData(QObject *parent = nullptr) : QObject(parent) { }
private slots:
void checkStrings_data();
void checkStrings();
void checkStrings2_data();
void checkStrings2();
void checkStringKeys();
void checkLinearised();
void checkNumPages();
void checkDate();
void checkPageSize();
void checkPortraitOrientation();
void checkLandscapeOrientation();
void checkUpsideDownOrientation();
void checkSeascapeOrientation();
void checkVersion();
void checkPdfId();
void checkNoPdfId();
};
void TestMetaData::checkStrings_data()
{
QTest::addColumn<QString>("key");
QTest::addColumn<QString>("value");
QTest::newRow( "Author" ) << "Author" << "Brad Hards";
QTest::newRow( "Title" ) << "Title" << "Two pages";
QTest::newRow( "Subject" ) << "Subject"
<< "A two page layout for poppler testing";
QTest::newRow( "Keywords" ) << "Keywords" << "Qt4 bindings";
QTest::newRow( "Creator" ) << "Creator" << "iText: cgpdftops CUPS filter";
QTest::newRow( "Producer" ) << "Producer" << "Acrobat Distiller 7.0 for Macintosh";
}
void TestMetaData::checkStrings()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf");
QVERIFY( doc );
QFETCH( QString, key );
QFETCH( QString, value );
QCOMPARE( doc->info(key), value );
delete doc;
}
void TestMetaData::checkStrings2_data()
{
QTest::addColumn<QString>("key");
QTest::addColumn<QString>("value");
QTest::newRow( "Title" ) << "Title" << "Malaga hotels";
QTest::newRow( "Author" ) << "Author" << "Brad Hards";
QTest::newRow( "Creator" ) << "Creator" << "Safari: cgpdftops CUPS filter";
QTest::newRow( "Producer" ) << "Producer" << "Acrobat Distiller 7.0 for Macintosh";
QTest::newRow( "Keywords" ) << "Keywords" << "First\rSecond\rthird";
QTest::newRow( "Custom1" ) << "Custom1" << "CustomValue1";
QTest::newRow( "Custom2" ) << "Custom2" << "CustomValue2";
}
void TestMetaData::checkStrings2()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY( doc );
QFETCH( QString, key );
QFETCH( QString, value );
QCOMPARE( doc->info(key), value );
delete doc;
}
void TestMetaData::checkStringKeys()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY( doc );
QStringList keyList;
keyList << QStringLiteral("Title") << QStringLiteral("Author") << QStringLiteral("Creator") << QStringLiteral("Keywords") << QStringLiteral("CreationDate");
keyList << QStringLiteral("Producer") << QStringLiteral("ModDate") << QStringLiteral("Custom1") << QStringLiteral("Custom2");
keyList.sort();
QStringList keysInDoc = doc->infoKeys();
keysInDoc.sort();
QCOMPARE( keysInDoc, keyList );
delete doc;
}
void TestMetaData::checkLinearised()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
QVERIFY( doc );
QVERIFY( doc->isLinearized() );
delete doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY( doc );
QCOMPARE( doc->isLinearized(), false );
delete doc;
}
void TestMetaData::checkPortraitOrientation()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
QVERIFY( doc );
Poppler::Page *page = doc->page(0);
QCOMPARE( page->orientation(), Poppler::Page::Portrait );
delete page;
delete doc;
}
void TestMetaData::checkNumPages()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf");
QVERIFY( doc );
QCOMPARE( doc->numPages(), 2 );
delete doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY( doc );
QCOMPARE( doc->numPages(), 1 );
delete doc;
}
void TestMetaData::checkDate()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY( doc );
QCOMPARE( doc->date(QStringLiteral("ModDate")), QDateTime(QDate(2005, 12, 5), QTime(9,44,46), Qt::UTC ) );
QCOMPARE( doc->date(QStringLiteral("CreationDate")), QDateTime(QDate(2005, 8, 13), QTime(1,12,11), Qt::UTC ) );
delete doc;
}
void TestMetaData::checkPageSize()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY( doc );
Poppler::Page *page = doc->page(0);
QCOMPARE( page->pageSize(), QSize(595, 842) );
QCOMPARE( page->pageSizeF(), QSizeF(595.22, 842) );
delete page;
delete doc;
}
void TestMetaData::checkLandscapeOrientation()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
QVERIFY( doc );
Poppler::Page *page = doc->page(1);
QCOMPARE( page->orientation(), Poppler::Page::Landscape );
delete page;
delete doc;
}
void TestMetaData::checkUpsideDownOrientation()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
QVERIFY( doc );
Poppler::Page *page = doc->page(2);
QCOMPARE( page->orientation(), Poppler::Page::UpsideDown );
delete page;
delete doc;
}
void TestMetaData::checkSeascapeOrientation()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/orientation.pdf");
QVERIFY( doc );
Poppler::Page *page = doc->page(3);
QCOMPARE( page->orientation(), Poppler::Page::Seascape );
delete page;
delete doc;
}
void TestMetaData::checkVersion()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/doublepage.pdf");
QVERIFY( doc );
int major = 0, minor = 0;
doc->getPdfVersion( &major, &minor );
QCOMPARE( major, 1 );
QCOMPARE( minor, 6 );
delete doc;
}
void TestMetaData::checkPdfId()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/A6EmbeddedFiles.pdf");
QVERIFY( doc );
const QByteArray referencePermanentId( "00C9D5B6D8FB11D7A902003065D630AA" );
const QByteArray referenceUpdateId( "39AECAE6D8FB11D7A902003065D630AA" );
{
// no IDs wanted, just existance check
QVERIFY( doc->getPdfId( nullptr, nullptr ) );
}
{
// only permanent ID
QByteArray permanentId;
QVERIFY( doc->getPdfId( &permanentId, nullptr ) );
QCOMPARE( permanentId.toUpper(), referencePermanentId );
}
{
// only update ID
QByteArray updateId;
QVERIFY( doc->getPdfId( nullptr, &updateId ) );
QCOMPARE( updateId.toUpper(), referenceUpdateId );
}
{
// both IDs
QByteArray permanentId;
QByteArray updateId;
QVERIFY( doc->getPdfId( &permanentId, &updateId ) );
QCOMPARE( permanentId.toUpper(), referencePermanentId );
QCOMPARE( updateId.toUpper(), referenceUpdateId );
}
delete doc;
}
void TestMetaData::checkNoPdfId()
{
Poppler::Document *doc;
doc = Poppler::Document::load(TESTDATADIR "/unittestcases/WithActualText.pdf");
QVERIFY( doc );
QVERIFY( !doc->getPdfId( nullptr, nullptr ) );
delete doc;
}
QTEST_GUILESS_MAIN(TestMetaData)
#include "check_metadata.moc"