File indexing completed on 2024-05-12 05:17:32
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <KItinerary/JsonLdDocument> 0008 #include <KItinerary/Rct2Ticket> 0009 #include <KItinerary/Uic9183Block> 0010 #include <KItinerary/Uic9183TicketLayout> 0011 0012 #include <QDebug> 0013 #include <QFile> 0014 #include <QJsonArray> 0015 #include <QJsonDocument> 0016 #include <QObject> 0017 #include <QProcess> 0018 #include <QTest> 0019 0020 using namespace KItinerary; 0021 0022 class Rct2ParserTest : public QObject 0023 { 0024 Q_OBJECT 0025 private Q_SLOTS: 0026 void testParserValid_data() 0027 { 0028 QTest::addColumn<QString>("inFile"); 0029 QTest::addColumn<QString>("refFile"); 0030 0031 QDir dir(QStringLiteral(SOURCE_DIR "/rct2/valid")); 0032 const auto lst = dir.entryList(QStringList(QStringLiteral("*.rct2")), QDir::Files | QDir::Readable | QDir::NoSymLinks); 0033 for (const auto &file : lst) { 0034 const QString refFile = dir.path() + QLatin1Char('/') + file.left(file.size() - 5) + QStringLiteral(".json"); 0035 if (!QFile::exists(refFile)) { 0036 qDebug() << "reference file" << refFile << "does not exist, skipping test file" << file; 0037 continue; 0038 } 0039 QTest::newRow(file.toUtf8().constData()) << QString(dir.path() + QLatin1Char('/') + file) << refFile; 0040 } 0041 } 0042 0043 void testParserValid() 0044 { 0045 QFETCH(QString, inFile); 0046 QFETCH(QString, refFile); 0047 0048 QFile f(inFile); 0049 QVERIFY(f.open(QFile::ReadOnly)); 0050 0051 const auto data = f.readAll(); 0052 Uic9183TicketLayout layout(Uic9183Block(data, 0)); 0053 Rct2Ticket rct2(layout); 0054 rct2.setContextDate({{2018, 12, 19}, {18, 35}}); 0055 QVERIFY(layout.isValid()); 0056 QCOMPARE(layout.type(), QLatin1StringView("RCT2")); 0057 QVERIFY(rct2.isValid()); 0058 0059 QFile ref(refFile); 0060 QVERIFY(ref.open(QFile::ReadOnly)); 0061 const auto refArray = QJsonDocument::fromJson(ref.readAll()).array(); 0062 QVERIFY(!refArray.isEmpty()); 0063 0064 const auto resJson = JsonLdDocument::toJson( 0065 QList<QVariant>({QVariant::fromValue(rct2)})); 0066 if (refArray != resJson) { 0067 qWarning().noquote() << QJsonDocument(resJson).toJson(); 0068 QFile failFile(refFile + QLatin1StringView(".fail")); 0069 QVERIFY(failFile.open(QFile::WriteOnly)); 0070 failFile.write(QJsonDocument(resJson).toJson()); 0071 failFile.close(); 0072 0073 QProcess proc; 0074 proc.setProcessChannelMode(QProcess::ForwardedChannels); 0075 proc.start(QStringLiteral("diff"), {QStringLiteral("-u"), refFile, failFile.fileName()}); 0076 QVERIFY(proc.waitForFinished()); 0077 } 0078 QCOMPARE(resJson, refArray); 0079 } 0080 }; 0081 0082 QTEST_APPLESS_MAIN(Rct2ParserTest) 0083 0084 #include "rct2parsertest.moc"