Spaces:
Sleeping
Sleeping
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) | |