File indexing completed on 2024-04-21 04:41:07
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelpers.h" 0008 #include "ifopt/ifoptutil.cpp" 0009 #include "backends/ivvassparser.cpp" 0010 #include "backends/ivvassproductmap.cpp" 0011 0012 #include <KPublicTransport/Journey> 0013 #include <KPublicTransport/Location> 0014 #include <KPublicTransport/Stopover> 0015 0016 #include <QFile> 0017 #include <QJsonArray> 0018 #include <QJsonObject> 0019 #include <QJsonDocument> 0020 #include <QJsonValue> 0021 #include <QTest> 0022 0023 #define s(x) QStringLiteral(x) 0024 0025 using namespace KPublicTransport; 0026 0027 class IvvAssParserTest : public QObject 0028 { 0029 Q_OBJECT 0030 private Q_SLOTS: 0031 void testParseLocations_data() 0032 { 0033 QTest::addColumn<QString>("inFileName"); 0034 QTest::addColumn<QString>("outFileName"); 0035 0036 QTest::newRow("location-by-name-vrs") 0037 << s(SOURCE_DIR "/data/ivvass/location-by-name-vrs-input.json") 0038 << s(SOURCE_DIR "/data/ivvass/location-by-name-vrs-output.json"); 0039 QTest::newRow("location-by-coord-vrs") 0040 << s(SOURCE_DIR "/data/ivvass/location-by-coord-vrs-input.json") 0041 << s(SOURCE_DIR "/data/ivvass/location-by-coord-vrs-output.json"); 0042 } 0043 0044 void testParseLocations() 0045 { 0046 QFETCH(QString, inFileName); 0047 QFETCH(QString, outFileName); 0048 0049 IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs")); 0050 const auto result = p.parseLocations(Test::readFile(inFileName)); 0051 QVERIFY(!result.empty()); 0052 QVERIFY(p.errorMessage.isEmpty()); 0053 const auto resultJson = Location::toJson(result); 0054 const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array(); 0055 if (resultJson != resultRef) { 0056 qDebug().noquote() << QJsonDocument(resultJson).toJson(); 0057 } 0058 QVERIFY(!resultJson.isEmpty()); 0059 QCOMPARE(resultJson, resultRef); 0060 } 0061 0062 void testParseStopovers_data() 0063 { 0064 QTest::addColumn<QString>("inFileName"); 0065 QTest::addColumn<QString>("outFileName"); 0066 0067 QTest::newRow("departure-vrs") 0068 << s(SOURCE_DIR "/data/ivvass/departure-vrs-input.json") 0069 << s(SOURCE_DIR "/data/ivvass/departure-vrs-output.json"); 0070 } 0071 0072 void testParseStopovers() 0073 { 0074 QFETCH(QString, inFileName); 0075 QFETCH(QString, outFileName); 0076 0077 IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs")); 0078 const auto result = p.parseStopovers(Test::readFile(inFileName)); 0079 QVERIFY(!result.empty()); 0080 QVERIFY(p.errorMessage.isEmpty()); 0081 const auto resultJson = Stopover::toJson(result); 0082 const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array(); 0083 if (resultJson != resultRef) { 0084 qDebug().noquote() << QJsonDocument(resultJson).toJson(); 0085 } 0086 QVERIFY(!resultJson.isEmpty()); 0087 QCOMPARE(resultJson, resultRef); 0088 } 0089 0090 void testParseJourneys_data() 0091 { 0092 QTest::addColumn<QString>("inFileName"); 0093 QTest::addColumn<QString>("outFileName"); 0094 0095 QTest::newRow("journey-vrs") 0096 << s(SOURCE_DIR "/data/ivvass/journey-vrs-input.json") 0097 << s(SOURCE_DIR "/data/ivvass/journey-vrs-output.json"); 0098 QTest::newRow("journey-long-distance-vrs") 0099 << s(SOURCE_DIR "/data/ivvass/journey-long-distance-vrs-input.json") 0100 << s(SOURCE_DIR "/data/ivvass/journey-long-distance-vrs-output.json"); 0101 QTest::newRow("journey-walking-directions-vrs") 0102 << s(SOURCE_DIR "/data/ivvass/journey-walking-directions-vrs-input.json") 0103 << s(SOURCE_DIR "/data/ivvass/journey-walking-directions-vrs-output.json"); 0104 } 0105 0106 void testParseJourneys() 0107 { 0108 QFETCH(QString, inFileName); 0109 QFETCH(QString, outFileName); 0110 0111 IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs")); 0112 const auto result = p.parseJourneys(Test::readFile(inFileName)); 0113 QVERIFY(!result.empty()); 0114 QVERIFY(p.errorMessage.isEmpty()); 0115 const auto resultJson = Journey::toJson(result); 0116 const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array(); 0117 QVERIFY(!resultJson.isEmpty()); 0118 QVERIFY(Test::compareJson(outFileName, resultJson, resultRef)); 0119 } 0120 0121 void testParseError() 0122 { 0123 { 0124 IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs")); 0125 const auto res = p.parseLocations(R"({"error":"Ung\u00fcltige Zeit"})"); 0126 QVERIFY(!p.errorMessage.isEmpty()); 0127 } 0128 { 0129 IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs")); 0130 const auto res = p.parseStopovers(R"({"error":"Fehlerhaftes Ziel"})"); 0131 QVERIFY(!p.errorMessage.isEmpty()); 0132 } 0133 { 0134 IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs")); 0135 const auto res = p.parseJourneys(R"({"error":"Fehlerhafter Start"})"); 0136 QVERIFY(!p.errorMessage.isEmpty()); 0137 } 0138 } 0139 }; 0140 0141 QTEST_GUILESS_MAIN(IvvAssParserTest) 0142 0143 #include "ivvassparsertest.moc"