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"