File indexing completed on 2024-04-28 15:59:44
0001 /* 0002 SPDX-FileCopyrightText: 2024 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include "testhelpers.h" 0007 #include "backends/motisparser.cpp" 0008 0009 #include <KPublicTransport/Journey> 0010 #include <KPublicTransport/Location> 0011 #include <KPublicTransport/Stopover> 0012 0013 #include <QFile> 0014 #include <QJsonArray> 0015 #include <QJsonObject> 0016 #include <QJsonDocument> 0017 #include <QJsonValue> 0018 #include <QTest> 0019 0020 using namespace Qt::Literals::StringLiterals; 0021 using namespace KPublicTransport; 0022 0023 class MotisParserTest : public QObject 0024 { 0025 Q_OBJECT 0026 private Q_SLOTS: 0027 void initTestCase() 0028 { 0029 qputenv("TZ", "UTC"); 0030 } 0031 0032 void testParseLocation_data() 0033 { 0034 QTest::addColumn<QString>("inFileName"); 0035 QTest::addColumn<QString>("outFileName"); 0036 0037 QTest::newRow("name-search") 0038 << QStringLiteral(SOURCE_DIR "/data/motis/location-name-search.in.json") 0039 << QStringLiteral(SOURCE_DIR "/data/motis/location-name-search.out.json"); 0040 QTest::newRow("geo-lookup") 0041 << QStringLiteral(SOURCE_DIR "/data/motis/location-geo-search.in.json") 0042 << QStringLiteral(SOURCE_DIR "/data/motis/location-geo-search.out.json"); 0043 } 0044 0045 void testParseLocation() 0046 { 0047 QFETCH(QString, inFileName); 0048 QFETCH(QString, outFileName); 0049 0050 MotisParser p(u"motis"_s); 0051 const auto result = p.parseStations(Test::readFile(inFileName)); 0052 QVERIFY(!result.empty()); 0053 QVERIFY(!p.hasError()); 0054 const auto resultJson = Location::toJson(result); 0055 const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array(); 0056 QVERIFY(!resultJson.isEmpty()); 0057 QVERIFY(Test::compareJson(outFileName, resultJson, resultRef)); 0058 } 0059 0060 void testParseStopovers_data() 0061 { 0062 QTest::addColumn<QString>("inFileName"); 0063 QTest::addColumn<QString>("outFileName"); 0064 0065 QTest::newRow("stopover-non-terminal") 0066 << QStringLiteral(SOURCE_DIR "/data/motis/stopovers-non-terminal.in.json") 0067 << QStringLiteral(SOURCE_DIR "/data/motis/stopovers-non-terminal.out.json"); 0068 QTest::newRow("stopover-terminal") 0069 << QStringLiteral(SOURCE_DIR "/data/motis/stopovers-terminal.in.json") 0070 << QStringLiteral(SOURCE_DIR "/data/motis/stopovers-terminal.out.json"); 0071 } 0072 0073 void testParseStopovers() 0074 { 0075 QFETCH(QString, inFileName); 0076 QFETCH(QString, outFileName); 0077 0078 MotisParser p(u"motis"_s); 0079 const auto result = p.parseEvents(Test::readFile(inFileName)); 0080 QVERIFY(!result.empty()); 0081 QVERIFY(!p.hasError()); 0082 const auto resultJson = Stopover::toJson(result); 0083 const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array(); 0084 QVERIFY(!resultJson.isEmpty()); 0085 QVERIFY(Test::compareJson(outFileName, resultJson, resultRef)); 0086 } 0087 0088 void testParseJourneys_data() 0089 { 0090 QTest::addColumn<QString>("inFileName"); 0091 QTest::addColumn<QString>("outFileName"); 0092 0093 QTest::newRow("ch-transport-only") 0094 << QStringLiteral(SOURCE_DIR "/data/motis/journey-ch-transport-only.in.json") 0095 << QStringLiteral(SOURCE_DIR "/data/motis/journey-ch-transport-only.out.json"); 0096 } 0097 0098 void testParseJourneys() 0099 { 0100 QFETCH(QString, inFileName); 0101 QFETCH(QString, outFileName); 0102 0103 MotisParser p(u"motis"_s); 0104 const auto result = p.parseConnections(Test::readFile(inFileName)); 0105 QVERIFY(!result.empty()); 0106 QVERIFY(!p.hasError()); 0107 const auto resultJson = Journey::toJson(result); 0108 const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array(); 0109 QVERIFY(!resultJson.isEmpty()); 0110 QVERIFY(Test::compareJson(outFileName, resultJson, resultRef)); 0111 } 0112 0113 void testParseError() 0114 { 0115 { 0116 MotisParser p(u"motis"_s); 0117 const auto result = p.parseStations(Test::readFile(QStringLiteral(SOURCE_DIR "/data/motis/error.in.json"))); 0118 QVERIFY(result.empty()); 0119 QVERIFY(p.hasError()); 0120 QCOMPARE(p.errorMessage(), "access: timestamp not in schedule"_L1); 0121 } 0122 { 0123 MotisParser p(u"motis"_s); 0124 const auto result = p.parseConnections(Test::readFile(QStringLiteral(SOURCE_DIR "/data/motis/error.in.json"))); 0125 QVERIFY(result.empty()); 0126 QVERIFY(p.hasError()); 0127 QCOMPARE(p.errorMessage(), "access: timestamp not in schedule"_L1); 0128 } 0129 } 0130 }; 0131 0132 QTEST_GUILESS_MAIN(MotisParserTest) 0133 0134 #include "motisparsertest.moc"