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