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/Uic9183Parser>
0009 
0010 #include <QDebug>
0011 #include <QFile>
0012 #include <QJsonArray>
0013 #include <QJsonDocument>
0014 #include <QObject>
0015 #include <QTest>
0016 
0017 using namespace KItinerary;
0018 
0019 class Uic9183ParserTest : public QObject
0020 {
0021     Q_OBJECT
0022 private Q_SLOTS:
0023     void testParserValid_data()
0024     {
0025         QTest::addColumn<QString>("inFile");
0026         QTest::addColumn<QString>("refFile");
0027 
0028         QDir dir(QStringLiteral(SOURCE_DIR "/uic918-3/valid"));
0029         const auto lst = dir.entryList(QStringList(QStringLiteral("*.bin")), QDir::Files | QDir::Readable | QDir::NoSymLinks);
0030         for (const auto &file : lst) {
0031             const QString refFile = dir.path() + QLatin1Char('/') + file.left(file.size() - 4) + QStringLiteral(".json");
0032             if (!QFile::exists(refFile)) {
0033                 qDebug() << "reference file" << refFile << "does not exist, skipping test file" << file;
0034                 continue;
0035             }
0036             QTest::newRow(file.toUtf8().constData()) << QString(dir.path() + QLatin1Char('/') +  file) << refFile;
0037         }
0038     }
0039 
0040     void testParserValid()
0041     {
0042         QFETCH(QString, inFile);
0043         QFETCH(QString, refFile);
0044 
0045         QFile f(inFile);
0046         QVERIFY(f.open(QFile::ReadOnly));
0047 
0048         Uic9183Parser p;
0049         p.parse(f.readAll());
0050         QVERIFY(p.isValid());
0051 
0052         QFile ref(refFile);
0053         QVERIFY(ref.open(QFile::ReadOnly));
0054         const auto refArray = QJsonDocument::fromJson(ref.readAll()).array();
0055         QVERIFY(!refArray.isEmpty());
0056 
0057         const auto resJson =
0058             JsonLdDocument::toJson(QList<QVariant>({QVariant::fromValue(p)}));
0059         if (refArray != resJson) {
0060             qWarning().noquote() << QJsonDocument(resJson).toJson();
0061         }
0062         QCOMPARE(resJson, refArray);
0063     }
0064 
0065     void testParserInvalid_data()
0066     {
0067         QTest::addColumn<QString>("fileName");
0068 
0069         QDir dir(QStringLiteral(SOURCE_DIR "/uic918-3/invalid"));
0070         const auto lst = dir.entryList(QStringList(QStringLiteral("*.bin")), QDir::Files | QDir::Readable | QDir::NoSymLinks);
0071         for (const auto &file : lst) {
0072             QTest::newRow(file.toLatin1().constData()) << QString(dir.path() + QLatin1Char('/') + file);
0073         }
0074     }
0075 
0076     void testParserInvalid()
0077     {
0078         QFETCH(QString, fileName);
0079         QFile f(fileName);
0080         QVERIFY(f.open(QFile::ReadOnly));
0081 
0082         Uic9183Parser p;
0083         p.parse(f.readAll());
0084         QVERIFY(!p.isValid());
0085     }
0086 };
0087 
0088 QTEST_APPLESS_MAIN(Uic9183ParserTest)
0089 
0090 #include "uic9183parsertest.moc"