File indexing completed on 2024-05-05 08:52:31
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelpers.h" 0008 0009 #include "backends/efacompactparser.h" 0010 #include "backends/efaxmlparser.h" 0011 0012 #include <KPublicTransport/Journey> 0013 #include <KPublicTransport/Location> 0014 #include <KPublicTransport/Stopover> 0015 0016 #include <QFile> 0017 #include <QJsonArray> 0018 #include <QJsonDocument> 0019 #include <QJsonValue> 0020 #include <QTest> 0021 #include <QTimeZone> 0022 0023 #define s(x) QStringLiteral(x) 0024 0025 using namespace KPublicTransport; 0026 0027 class EfaParserTest : public QObject 0028 { 0029 Q_OBJECT 0030 private: 0031 QByteArray readFile(const QString &fn) 0032 { 0033 QFile f(fn); 0034 f.open(QFile::ReadOnly); 0035 return f.readAll(); 0036 } 0037 0038 private Q_SLOTS: 0039 void initTestCase() 0040 { 0041 qputenv("TZ", "UTC"); 0042 qRegisterMetaType<Disruption::Effect>(); 0043 } 0044 0045 void testParseLocation_data() 0046 { 0047 QTest::addColumn<QString>("inFileName"); 0048 QTest::addColumn<QString>("refFileName"); 0049 0050 QTest::newRow("vgn-by-coord") 0051 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-vgn-by-coord.xml") 0052 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-vgn-by-coord.json"); 0053 QTest::newRow("chicago-by-name") 0054 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-chicago-by-name.xml") 0055 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-chicago-by-name.json"); 0056 QTest::newRow("tfi-alternate-format") 0057 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-alternate-tfi-by-name.xml") 0058 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-alternate-tfi-by-name.json"); 0059 QTest::newRow("mvv-alternate-format") 0060 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-alternate-mvv-by-name.xml") 0061 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-alternate-mvv-by-name.json"); 0062 QTest::newRow("bwegt-by-name") 0063 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-bwegt-by-name.xml") 0064 << s(SOURCE_DIR "/data/efa/stopfinder-response-full-bwegt-by-name.json"); 0065 } 0066 0067 void testParseLocation() 0068 { 0069 QFETCH(QString, inFileName); 0070 QFETCH(QString, refFileName); 0071 0072 KPublicTransport::EfaXmlParser parser; 0073 parser.setLocationIdentifierType(s("testid")); 0074 0075 const auto res = parser.parseStopFinderResponse(readFile(inFileName)); 0076 const auto jsonRes = Location::toJson(res); 0077 0078 const auto ref = QJsonDocument::fromJson(readFile(refFileName)).array(); 0079 0080 if (jsonRes != ref) { 0081 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0082 } 0083 QCOMPARE(jsonRes, ref); 0084 } 0085 0086 void testParseCompactLocation_data() 0087 { 0088 QTest::addColumn<QString>("inFileName"); 0089 QTest::addColumn<QString>("refFileName"); 0090 0091 QTest::newRow("by-by-name") 0092 << s(SOURCE_DIR "/data/efa/stopfinder-response-compact-by-by-name.xml") 0093 << s(SOURCE_DIR "/data/efa/stopfinder-response-compact-by-by-name.json"); 0094 } 0095 0096 void testParseCompactLocation() 0097 { 0098 QFETCH(QString, inFileName); 0099 QFETCH(QString, refFileName); 0100 0101 KPublicTransport::EfaCompactParser parser; 0102 parser.setLocationIdentifierType(s("testid")); 0103 0104 const auto res = parser.parseStopFinderResponse(readFile(inFileName)); 0105 const auto jsonRes = Location::toJson(res); 0106 0107 const auto ref = QJsonDocument::fromJson(readFile(refFileName)).array(); 0108 0109 if (jsonRes != ref) { 0110 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0111 } 0112 QCOMPARE(jsonRes, ref); 0113 } 0114 0115 void testParseDepartures_data() 0116 { 0117 QTest::addColumn<QString>("inFileName"); 0118 QTest::addColumn<QString>("refFileName"); 0119 0120 QTest::newRow("vgn-departures") 0121 << s(SOURCE_DIR "/data/efa/dm-response-full-vgn-departures.xml") 0122 << s(SOURCE_DIR "/data/efa/dm-response-full-vgn-departures.json"); 0123 } 0124 0125 void testParseDepartures() 0126 { 0127 QFETCH(QString, inFileName); 0128 QFETCH(QString, refFileName); 0129 0130 KPublicTransport::EfaXmlParser parser; 0131 parser.setLocationIdentifierType(s("testid")); 0132 0133 const auto res = parser.parseDmResponse(readFile(inFileName)); 0134 const auto jsonRes = Stopover::toJson(res); 0135 0136 const auto ref = QJsonDocument::fromJson(readFile(refFileName)).array(); 0137 0138 if (jsonRes != ref) { 0139 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0140 } 0141 QVERIFY(!jsonRes.empty()); 0142 QCOMPARE(jsonRes, ref); 0143 0144 QVERIFY(!parser.requestContext().isEmpty()); 0145 QCOMPARE(parser.requestContext().sessionId, QLatin1String("123456789")); 0146 QCOMPARE(parser.requestContext().requestId, QLatin1String("0")); 0147 } 0148 0149 void testParseCompactDepartures_data() 0150 { 0151 QTest::addColumn<QString>("inFileName"); 0152 QTest::addColumn<QString>("refFileName"); 0153 0154 QTest::newRow("by-departures") 0155 << s(SOURCE_DIR "/data/efa/dm-response-compact-by-departures.xml") 0156 << s(SOURCE_DIR "/data/efa/dm-response-compact-by-departures.json"); 0157 } 0158 0159 void testParseCompactDepartures() 0160 { 0161 QFETCH(QString, inFileName); 0162 QFETCH(QString, refFileName); 0163 0164 KPublicTransport::EfaCompactParser parser; 0165 parser.setLocationIdentifierType(s("testid")); 0166 0167 const auto res = parser.parseDmResponse(readFile(inFileName)); 0168 const auto jsonRes = Stopover::toJson(res); 0169 0170 const auto ref = QJsonDocument::fromJson(readFile(refFileName)).array(); 0171 0172 if (jsonRes != ref) { 0173 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0174 } 0175 QVERIFY(!jsonRes.empty()); 0176 QCOMPARE(jsonRes, ref); 0177 0178 QVERIFY(!parser.requestContext().isEmpty()); 0179 QCOMPARE(parser.requestContext().sessionId, QLatin1String("123456789")); 0180 QCOMPARE(parser.requestContext().requestId, QLatin1String("0")); 0181 } 0182 0183 void testParseTrips_data() 0184 { 0185 QTest::addColumn<QString>("inFileName"); 0186 QTest::addColumn<QString>("refFileName"); 0187 0188 QTest::newRow("vgn-trip") 0189 << s(SOURCE_DIR "/data/efa/trip-response-full-vgn.xml") 0190 << s(SOURCE_DIR "/data/efa/trip-response-full-vgn.json"); 0191 QTest::newRow("vgn-trip-indoor-path") 0192 << s(SOURCE_DIR "/data/efa/trip-response-full-indoor-path-vgn.xml") 0193 << s(SOURCE_DIR "/data/efa/trip-response-full-indoor-path-vgn.json"); 0194 QTest::newRow("vrt-trip-alternative-notes") 0195 << s(SOURCE_DIR "/data/efa/trip-response-full-vrt.xml") 0196 << s(SOURCE_DIR "/data/efa/trip-response-full-vrt.json"); 0197 } 0198 0199 void testParseTrips() 0200 { 0201 QFETCH(QString, inFileName); 0202 QFETCH(QString, refFileName); 0203 0204 KPublicTransport::EfaXmlParser parser; 0205 parser.setLocationIdentifierType(s("testid")); 0206 0207 const auto res = parser.parseTripResponse(readFile(inFileName)); 0208 const auto jsonRes = Journey::toJson(res); 0209 0210 const auto ref = QJsonDocument::fromJson(readFile(refFileName)).array(); 0211 0212 QVERIFY(!jsonRes.empty()); 0213 QVERIFY(Test::compareJson(refFileName, jsonRes, ref)); 0214 0215 QVERIFY(!parser.requestContext().isEmpty()); 0216 QCOMPARE(parser.requestContext().sessionId, QLatin1String("123456789")); 0217 QCOMPARE(parser.requestContext().requestId, QLatin1String("0")); 0218 } 0219 0220 void testParseCompactTrips_data() 0221 { 0222 QTest::addColumn<QString>("inFileName"); 0223 QTest::addColumn<QString>("refFileName"); 0224 0225 QTest::newRow("by-trip") 0226 << s(SOURCE_DIR "/data/efa/trip-response-compact-by.xml") 0227 << s(SOURCE_DIR "/data/efa/trip-response-compact-by.json"); 0228 } 0229 0230 void testParseCompactTrips() 0231 { 0232 QFETCH(QString, inFileName); 0233 QFETCH(QString, refFileName); 0234 0235 KPublicTransport::EfaCompactParser parser; 0236 parser.setLocationIdentifierType(s("testid")); 0237 0238 const auto res = parser.parseTripResponse(readFile(inFileName)); 0239 const auto jsonRes = Journey::toJson(res); 0240 0241 const auto ref = QJsonDocument::fromJson(readFile(refFileName)).array(); 0242 0243 QVERIFY(!jsonRes.empty()); 0244 QVERIFY(Test::compareJson(refFileName, jsonRes, ref)); 0245 0246 QVERIFY(!parser.requestContext().isEmpty()); 0247 QCOMPARE(parser.requestContext().sessionId, QLatin1String("123456789")); 0248 QCOMPARE(parser.requestContext().requestId, QLatin1String("0")); 0249 } 0250 0251 }; 0252 0253 QTEST_GUILESS_MAIN(EfaParserTest) 0254 0255 #include "efaparsertest.moc"