blob: 165e318aed204079a444586046b854a5a690eb1f [file] [log] [blame] [edit]
#include <QtTest/QTest>
#include "PDFDoc.h"
#include "GlobalParams.h"
#include "Outline.h"
#include "poppler-private.h"
class TestUtf8Document : public QObject
{
Q_OBJECT
public:
explicit TestUtf8Document(QObject *parent = nullptr) : QObject(parent) { }
private Q_SLOTS:
void checkStrings();
};
inline QString outlineItemTitle(OutlineItem *item)
{
if (!item) {
return {};
}
const std::vector<Unicode> &title = item->getTitle();
return QString::fromUcs4(reinterpret_cast<const char32_t *>(title.data()), title.size());
}
void TestUtf8Document::checkStrings()
{
globalParams = std::make_unique<GlobalParams>();
auto doc = std::make_unique<PDFDoc>(std::make_unique<GooString>(TESTDATADIR "/unittestcases/pdf20-utf8-test.pdf"));
QVERIFY(doc);
QVERIFY(doc->isOk());
QVERIFY(doc->getOptContentConfig() && doc->getOptContentConfig()->hasOCGs());
QCOMPARE(Poppler::UnicodeParsedString(doc->getDocInfoTitle().get()), QString::fromUtf8("表ポあA鷗ŒéB逍Üߪąñ丂㐀𠀀")); // clazy:exclude=qstring-allocations
QSet<QString> expectedNames { QString::fromUtf8("گچپژ"), QString::fromUtf8("Layer 1") }; // clazy:exclude=qstring-allocations
QSet<QString> foundNames;
for (auto &[ref, group] : doc->getOptContentConfig()->getOCGs()) {
foundNames.insert(Poppler::UnicodeParsedString(group->getName()));
}
QCOMPARE(expectedNames, foundNames);
auto outlineItems = doc->getOutline()->getItems();
QVERIFY(outlineItems);
QCOMPARE(outlineItems->size(), 3);
QCOMPARE(outlineItemTitle(outlineItems->at(0)), QString::fromUtf8("PDF 2.0 with UTF-8 test file")); // clazy:exclude=qstring-allocations
QCOMPARE(outlineItemTitle(outlineItems->at(1)), QString::fromUtf8("\u202A\u202Atest\u202A")); // clazy:exclude=qstring-allocations
QCOMPARE(outlineItemTitle(outlineItems->at(2)), QString::fromUtf8("🌈️\n" /*emoji rainbow flag*/)); // clazy:exclude=qstring-allocations
}
QTEST_GUILESS_MAIN(TestUtf8Document)
#include "check_utf8document.moc"