1 /*
2     SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include <KItinerary/JsonLdDocument>
8 #include <KItinerary/Rct2Ticket>
9 #include <KItinerary/Uic9183Block>
10 #include <KItinerary/Uic9183TicketLayout>
11 
12 #include <QDebug>
13 #include <QFile>
14 #include <QJsonArray>
15 #include <QJsonDocument>
16 #include <QObject>
17 #include <QTest>
18 
19 using namespace KItinerary;
20 
21 class Rct2ParserTest : public QObject
22 {
23     Q_OBJECT
24 private Q_SLOTS:
testParserValid_data()25     void testParserValid_data()
26     {
27         QTest::addColumn<QString>("inFile");
28         QTest::addColumn<QString>("refFile");
29 
30         QDir dir(QStringLiteral(SOURCE_DIR "/rct2/valid"));
31         const auto lst = dir.entryList(QStringList(QStringLiteral("*.rct2")), QDir::Files | QDir::Readable | QDir::NoSymLinks);
32         for (const auto &file : lst) {
33             const QString refFile = dir.path() + QLatin1Char('/') + file.left(file.size() - 5) + QStringLiteral(".json");
34             if (!QFile::exists(refFile)) {
35                 qDebug() << "reference file" << refFile << "does not exist, skipping test file" << file;
36                 continue;
37             }
38             QTest::newRow(file.toUtf8().constData()) << QString(dir.path() + QLatin1Char('/') +  file) << refFile;
39         }
40     }
41 
testParserValid()42     void testParserValid()
43     {
44         QFETCH(QString, inFile);
45         QFETCH(QString, refFile);
46 
47         QFile f(inFile);
48         QVERIFY(f.open(QFile::ReadOnly));
49 
50         const auto data = f.readAll();
51         Uic9183TicketLayout layout(Uic9183Block(data, 0));
52         Rct2Ticket rct2(layout);
53         rct2.setContextDate({{2018, 12, 19}, {18, 35}});
54         QVERIFY(layout.isValid());
55         QCOMPARE(layout.type(), QLatin1String("RCT2"));
56         QVERIFY(rct2.isValid());
57 
58         QFile ref(refFile);
59         QVERIFY(ref.open(QFile::ReadOnly));
60         const auto refArray = QJsonDocument::fromJson(ref.readAll()).array();
61         QVERIFY(!refArray.isEmpty());
62 
63         const auto resJson = JsonLdDocument::toJson(QVector<QVariant>({QVariant::fromValue(rct2)}));
64         if (refArray != resJson) {
65             qWarning().noquote() << QJsonDocument(resJson).toJson();
66         }
67         QCOMPARE(resJson, refArray);
68     }
69 };
70 
71 QTEST_APPLESS_MAIN(Rct2ParserTest)
72 
73 #include "rct2parsertest.moc"
74