#include <QtTest/QtTest>

Q_DECLARE_METATYPE(QDate)
Q_DECLARE_METATYPE(QTime)

#include <poppler-qt5.h>

class TestDateConv: public QObject
{
    Q_OBJECT
private slots:
    void initTestCase();
    void checkDates_data();
    void checkDates();
    void checkInvalidDates_data();
    void checkInvalidDates();
};

void TestDateConv::initTestCase()
{
    qRegisterMetaType<QDate>("QDate");
    qRegisterMetaType<QTime>("QTime");
}

void TestDateConv::checkDates_data()
{
    QTest::addColumn<QByteArray>("input");
    QTest::addColumn<QDate>("day");
    QTest::addColumn<QTime>("time");

    // This is a typical case - all data provided
    QTest::newRow("D:20040101121110")
      << QByteArray("D:20040101121110Z")
      << QDate( 2004, 1, 1)
      << QTime( 12, 11, 10);

    // The D: is strongly recommended, but optional
    QTest::newRow("20040101121110")
      << QByteArray("20040101121110Z")
      << QDate( 2004, 1, 1)
      << QTime( 12, 11, 10);

    // Only the year is actually required
    QTest::newRow("D:2006")
      << QByteArray("D:2006")
      << QDate( 2006, 1, 1)
      << QTime( 0, 0, 0);

    QTest::newRow("D:200602")
      << QByteArray("D:200602")
      << QDate( 2006, 2, 1)
      << QTime( 0, 0, 0);

    QTest::newRow("D:20060304")
      << QByteArray("D:20060304")
      << QDate( 2006, 3, 4)
      << QTime( 0, 0, 0);

    QTest::newRow("D:2006030405")
      << QByteArray("D:2006030405")
      << QDate( 2006, 3, 4)
      << QTime( 5, 0, 0);

    QTest::newRow("D:200603040512")
      << QByteArray("D:200603040512")
      << QDate( 2006, 3, 4)
      << QTime( 5, 12, 0);

    // If the timezone isn't specified, I assume UTC
    QTest::newRow("D:20060304051226")
      << QByteArray("D:20060304051226")
      << QDate( 2006, 3, 4)
      << QTime( 5, 12, 26);

    // Check for real timezone conversions
    QTest::newRow("D:20030131115258-04'00'")
      << QByteArray("D:20030131115258-04'00'")
      << QDate( 2003, 1, 31)
      << QTime( 15, 52, 58);

    QTest::newRow("D:20030131115258+05'00'")
      << QByteArray("D:20030131115258+05'00'")
      << QDate( 2003, 1, 31)
      << QTime( 6, 52, 58);

    // There are places that have non-hour offsets
    // Yep, that means you Adelaide.
    QTest::newRow("D:20030131115258+08'30'")
      << QByteArray("D:20030131115258+08'30'")
      << QDate( 2003, 1, 31)
      << QTime( 3, 22, 58);

    QTest::newRow("D:20030131115258-08'30'")
      << QByteArray("D:20030131115258-08'30'")
      << QDate( 2003, 1, 31)
      << QTime( 20, 22, 58);
}

void TestDateConv::checkDates()
{
    QFETCH(QByteArray, input);
    QFETCH(QDate, day);
    QFETCH(QTime, time);

    QCOMPARE( Poppler::convertDate(input.data()), QDateTime(day, time, Qt::UTC) );
}

void TestDateConv::checkInvalidDates_data()
{
    QTest::addColumn<QByteArray>("input");

    // Null data
    QTest::newRow("Null data")
      << QByteArray();

    // Empty data
    QTest::newRow("Empty data")
      << QByteArray("");

    // Empty data
    QTest::newRow("One character")
      << QByteArray("D");

    // Empty data
    QTest::newRow("'D:'")
      << QByteArray("D:");

    // Empty data
    QTest::newRow("Not a date")
      << QByteArray("D:IAmNotAValidDate");
}

void TestDateConv::checkInvalidDates()
{
    QFETCH(QByteArray, input);

    QCOMPARE(Poppler::convertDate(input.data()), QDateTime());
}

QTEST_MAIN(TestDateConv)

#include "check_dateConversion.moc"
