blob: 77b8f7e57f6c2b9b050fabed218531ec0a36afcd [file] [log] [blame] [edit]
#include <QtTest/QTest>
#include <poppler-qt6.h>
#include <memory>
class TestFontsData : public QObject
{
Q_OBJECT
public:
explicit TestFontsData(QObject *parent = nullptr) : QObject(parent) { }
private slots:
void checkNoFonts();
void checkType1();
void checkType3();
void checkTrueType();
void checkFontIterator();
void checkSecondDocumentQuery();
void checkMultipleIterations();
void checkIteratorFonts();
};
static QList<Poppler::FontInfo> loadFontsViaIterator(Poppler::Document *doc, int from = 0, int count = -1)
{
int num = count == -1 ? doc->numPages() - from : count;
QList<Poppler::FontInfo> list;
std::unique_ptr<Poppler::FontIterator> it(doc->newFontIterator(from));
while (it->hasNext() && num) {
list += it->next();
--num;
}
return list;
}
namespace Poppler {
static bool operator==(const FontInfo &f1, const FontInfo &f2)
{
if (f1.name() != f2.name()) {
return false;
}
if (f1.file() != f2.file()) {
return false;
}
if (f1.isEmbedded() != f2.isEmbedded()) {
return false;
}
if (f1.isSubset() != f2.isSubset()) {
return false;
}
if (f1.type() != f2.type()) {
return false;
}
if (f1.typeName() != f2.typeName()) {
return false;
}
return true;
}
}
void TestFontsData::checkNoFonts()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/image.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = doc->fonts();
QCOMPARE(listOfFonts.size(), 0);
}
void TestFontsData::checkType1()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/text.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = doc->fonts();
QCOMPARE(listOfFonts.size(), 1);
QCOMPARE(listOfFonts.at(0).name(), QLatin1String("Helvetica"));
QCOMPARE(listOfFonts.at(0).type(), Poppler::FontInfo::Type1);
QCOMPARE(listOfFonts.at(0).typeName(), QLatin1String("Type 1"));
QCOMPARE(listOfFonts.at(0).isEmbedded(), false);
QCOMPARE(listOfFonts.at(0).isSubset(), false);
}
void TestFontsData::checkType3()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = doc->fonts();
QCOMPARE(listOfFonts.size(), 2);
QCOMPARE(listOfFonts.at(0).name(), QLatin1String("Helvetica"));
QCOMPARE(listOfFonts.at(0).type(), Poppler::FontInfo::Type1);
QCOMPARE(listOfFonts.at(0).typeName(), QLatin1String("Type 1"));
QCOMPARE(listOfFonts.at(0).isEmbedded(), false);
QCOMPARE(listOfFonts.at(0).isSubset(), false);
QCOMPARE(listOfFonts.at(1).name(), QString());
QCOMPARE(listOfFonts.at(1).type(), Poppler::FontInfo::Type3);
QCOMPARE(listOfFonts.at(1).typeName(), QLatin1String("Type 3"));
QCOMPARE(listOfFonts.at(1).isEmbedded(), true);
QCOMPARE(listOfFonts.at(1).isSubset(), false);
}
void TestFontsData::checkTrueType()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/unittestcases/truetype.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = doc->fonts();
QCOMPARE(listOfFonts.size(), 2);
QCOMPARE(listOfFonts.at(0).name(), QLatin1String("Arial-BoldMT"));
QCOMPARE(listOfFonts.at(0).type(), Poppler::FontInfo::TrueType);
QCOMPARE(listOfFonts.at(0).typeName(), QLatin1String("TrueType"));
QCOMPARE(listOfFonts.at(0).isEmbedded(), false);
QCOMPARE(listOfFonts.at(0).isSubset(), false);
QCOMPARE(listOfFonts.at(1).name(), QLatin1String("ArialMT"));
QCOMPARE(listOfFonts.at(1).type(), Poppler::FontInfo::TrueType);
QCOMPARE(listOfFonts.at(1).typeName(), QLatin1String("TrueType"));
QCOMPARE(listOfFonts.at(1).isEmbedded(), false);
QCOMPARE(listOfFonts.at(1).isSubset(), false);
}
void TestFontsData::checkFontIterator()
{
// loading a 1-page document
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf");
QVERIFY(doc);
// loading a 6-pages document
std::unique_ptr<Poppler::Document> doc6 = Poppler::Document::load(TESTDATADIR "/tests/cropbox.pdf");
QVERIFY(doc6);
std::unique_ptr<Poppler::FontIterator> it;
// some tests with the 1-page document:
// - check a default iterator
it = doc->newFontIterator();
QVERIFY(it->hasNext());
// - check an iterator for negative pages to behave as 0
it = doc->newFontIterator(-1);
QVERIFY(it->hasNext());
// - check an iterator for pages out of the page limit
it = doc->newFontIterator(1);
QVERIFY(!it->hasNext());
// - check that it reaches the end after 1 iteration
it = doc->newFontIterator();
QVERIFY(it->hasNext());
it->next();
QVERIFY(!it->hasNext());
// some tests with the 6-page document:
// - check a default iterator
it = doc6->newFontIterator();
QVERIFY(it->hasNext());
// - check an iterator for pages out of the page limit
it = doc6->newFontIterator(6);
QVERIFY(!it->hasNext());
// - check that it reaches the end after 6 iterations
it = doc6->newFontIterator();
QVERIFY(it->hasNext());
it->next();
QVERIFY(it->hasNext());
it->next();
QVERIFY(it->hasNext());
it->next();
QVERIFY(it->hasNext());
it->next();
QVERIFY(it->hasNext());
it->next();
QVERIFY(it->hasNext());
it->next();
QVERIFY(!it->hasNext());
}
void TestFontsData::checkSecondDocumentQuery()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = doc->fonts();
QCOMPARE(listOfFonts.size(), 2);
// check we get the very same result when calling fonts() again (#19405)
QList<Poppler::FontInfo> listOfFonts2 = doc->fonts();
QCOMPARE(listOfFonts, listOfFonts2);
}
void TestFontsData::checkMultipleIterations()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/type3.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = loadFontsViaIterator(doc.get());
QCOMPARE(listOfFonts.size(), 2);
QList<Poppler::FontInfo> listOfFonts2 = loadFontsViaIterator(doc.get());
QCOMPARE(listOfFonts, listOfFonts2);
}
void TestFontsData::checkIteratorFonts()
{
std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(TESTDATADIR "/tests/fonts.pdf");
QVERIFY(doc);
QList<Poppler::FontInfo> listOfFonts = doc->fonts();
QCOMPARE(listOfFonts.size(), 3);
// check we get the very same result when gatering fonts using the iterator
QList<Poppler::FontInfo> listOfFonts2 = loadFontsViaIterator(doc.get());
QCOMPARE(listOfFonts, listOfFonts2);
}
QTEST_GUILESS_MAIN(TestFontsData)
#include "check_fonts.moc"