#include <QtTest/QTest>

#include <poppler-qt5.h>

#include <memory>

class TestOutline : public QObject
{
    Q_OBJECT
public:
    explicit TestOutline(QObject *parent = nullptr) : QObject(parent) { }
private slots:
    void checkOutline_xr02();
};

void TestOutline::checkOutline_xr02()
{
    std::unique_ptr<Poppler::Document> document { Poppler::Document::load(TESTDATADIR "/unittestcases/xr02.pdf") };
    QVERIFY(document.get());

    const auto outline = document->outline();
    QCOMPARE(outline.size(), 2);

    const auto &foo = outline[0];
    QVERIFY(!foo.isNull());
    QCOMPARE(foo.name(), QStringLiteral("foo"));
    QCOMPARE(foo.isOpen(), false);
    const auto fooDest = foo.destination();
    QVERIFY(!fooDest.isNull());
    QCOMPARE(fooDest->pageNumber(), 1);
    QVERIFY(foo.externalFileName().isEmpty());
    QVERIFY(foo.uri().isEmpty());
    QVERIFY(!foo.hasChildren());
    QVERIFY(foo.children().isEmpty());

    const auto &bar = outline[1];
    QVERIFY(!bar.isNull());
    QCOMPARE(bar.name(), QStringLiteral("bar"));
    QCOMPARE(bar.isOpen(), false);
    const auto barDest = bar.destination();
    QVERIFY(!barDest.isNull());
    QCOMPARE(barDest->pageNumber(), 2);
    QVERIFY(bar.externalFileName().isEmpty());
    QVERIFY(bar.uri().isEmpty());
    QVERIFY(!bar.hasChildren());
    QVERIFY(bar.children().isEmpty());
}

QTEST_GUILESS_MAIN(TestOutline)
#include "check_outline.moc"
