File indexing completed on 2024-04-14 04:36:19
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelpers.h" 0008 #include "backends/opentripplannerparser.h" 0009 0010 #include <KPublicTransport/Journey> 0011 #include <KPublicTransport/Location> 0012 #include <KPublicTransport/RentalVehicle> 0013 #include <KPublicTransport/Stopover> 0014 0015 #include <QFile> 0016 #include <QJsonArray> 0017 #include <QJsonDocument> 0018 #include <QJsonObject> 0019 #include <QJsonValue> 0020 #include <QTest> 0021 #include <QTimeZone> 0022 0023 #define s(x) QStringLiteral(x) 0024 0025 using namespace KPublicTransport; 0026 0027 using RentalVehicleNetworkMap = QHash<QString, RentalVehicleNetwork>; 0028 0029 class OtpParserTest : public QObject 0030 { 0031 Q_OBJECT 0032 private Q_SLOTS: 0033 void initTestCase() 0034 { 0035 qputenv("TZ", "UTC"); 0036 QLocale::setDefault(QLocale(QLocale::Swedish, QLocale::Finland)); 0037 qRegisterMetaType<Disruption::Effect>(); 0038 qRegisterMetaType<RentalVehicle>(); 0039 } 0040 0041 void testParseLocationByCoordinate_data() 0042 { 0043 QTest::addColumn<QString>("inFileName"); 0044 QTest::addColumn<QString>("refFileName"); 0045 QTest::addColumn<RentalVehicleNetworkMap>("networks"); 0046 0047 QTest::newRow("fi-digitransit-location") 0048 << s(SOURCE_DIR "/data/otp/fi-digitransit-location-by-coordinate.in.json") 0049 << s(SOURCE_DIR "/data/otp/fi-digitransit-location-by-coordinate.out.json") 0050 << RentalVehicleNetworkMap(); 0051 0052 RentalVehicleNetworkMap networks; 0053 networks.insert(s("car-sharing"), {}); 0054 networks.insert(s("taxi"), {}); 0055 RentalVehicleNetwork n; 0056 n.setName(s("RegioRad")); 0057 n.setVehicleTypes(RentalVehicle::Bicycle); 0058 networks.insert(s("regiorad"), n); 0059 QTest::newRow("de-stadtnavi-rental-vehicle-locations") 0060 << s(SOURCE_DIR "/data/otp/de-stadtnavi-rental-vehicle-locations.in.json") 0061 << s(SOURCE_DIR "/data/otp/de-stadtnavi-rental-vehicle-locations.out.json") 0062 << networks; 0063 } 0064 0065 void testParseLocationByCoordinate() 0066 { 0067 QFETCH(QString, inFileName); 0068 QFETCH(QString, refFileName); 0069 QFETCH(RentalVehicleNetworkMap, networks); 0070 0071 OpenTripPlannerParser p(s("gtfs")); 0072 p.setKnownRentalVehicleNetworks(networks); 0073 const auto res = p.parseLocationsByCoordinate(QJsonDocument::fromJson(Test::readFile(inFileName)).object()); 0074 const auto jsonRes = Location::toJson(res); 0075 0076 const auto ref = QJsonDocument::fromJson(Test::readFile(refFileName)).array(); 0077 0078 if (jsonRes != ref) { 0079 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0080 } 0081 QVERIFY(!jsonRes.empty()); 0082 QCOMPARE(jsonRes, ref); 0083 } 0084 0085 void testParseLocationByName_data() 0086 { 0087 QTest::addColumn<QString>("inFileName"); 0088 QTest::addColumn<QString>("refFileName"); 0089 0090 QTest::newRow("fi-digitransit-location") 0091 << s(SOURCE_DIR "/data/otp/fi-digitransit-location-by-name.in.json") 0092 << s(SOURCE_DIR "/data/otp/fi-digitransit-location-by-name.out.json"); 0093 QTest::newRow("it-torino-location") 0094 << s(SOURCE_DIR "/data/otp/it-torino-location-by-name.in.json") 0095 << s(SOURCE_DIR "/data/otp/it-torino-location-by-name.out.json"); 0096 } 0097 0098 void testParseLocationByName() 0099 { 0100 QFETCH(QString, inFileName); 0101 QFETCH(QString, refFileName); 0102 0103 OpenTripPlannerParser p(s("gtfs")); 0104 const auto res = p.parseLocationsByName(QJsonDocument::fromJson(Test::readFile(inFileName)).object()); 0105 const auto jsonRes = Location::toJson(res); 0106 0107 const auto ref = QJsonDocument::fromJson(Test::readFile(refFileName)).array(); 0108 0109 if (jsonRes != ref) { 0110 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0111 } 0112 QVERIFY(!jsonRes.empty()); 0113 QCOMPARE(jsonRes, ref); 0114 } 0115 0116 void testParseDepartures_data() 0117 { 0118 QTest::addColumn<QString>("inFileName"); 0119 QTest::addColumn<QString>("refFileName"); 0120 0121 QTest::newRow("fi-digitransit-departures") 0122 << s(SOURCE_DIR "/data/otp/fi-digitransit-departure.in.json") 0123 << s(SOURCE_DIR "/data/otp/fi-digitransit-departure.out.json"); 0124 } 0125 0126 void testParseDepartures() 0127 { 0128 QFETCH(QString, inFileName); 0129 QFETCH(QString, refFileName); 0130 0131 OpenTripPlannerParser p(s("gtfs")); 0132 const auto res = p.parseDepartures(QJsonDocument::fromJson(Test::readFile(inFileName)).object()); 0133 const auto jsonRes = Stopover::toJson(res); 0134 0135 const auto ref = QJsonDocument::fromJson(Test::readFile(refFileName)).array(); 0136 0137 if (jsonRes != ref) { 0138 qDebug().noquote() << QJsonDocument(jsonRes).toJson(); 0139 } 0140 QVERIFY(!jsonRes.empty()); 0141 QCOMPARE(jsonRes, ref); 0142 } 0143 0144 void testParseJourney_data() 0145 { 0146 QTest::addColumn<QString>("inFileName"); 0147 QTest::addColumn<QString>("refFileName"); 0148 QTest::addColumn<QString>("networkConfig"); 0149 0150 QTest::newRow("fi-digitransit-journey") 0151 << s(SOURCE_DIR "/data/otp/fi-digitransit-journey.in.json") 0152 << s(SOURCE_DIR "/data/otp/fi-digitransit-journey.out.json") 0153 << QString(); 0154 QTest::newRow("no-entur-journey") 0155 << s(SOURCE_DIR "/data/otp/no-entur-journey.in.json") 0156 << s(SOURCE_DIR "/data/otp/no-entur-journey.out.json") 0157 << QString(); 0158 QTest::newRow("de-ulm-rentalbike-journey") 0159 << s(SOURCE_DIR "/data/otp/de-ulm-rentalbike-journey.in.json") 0160 << s(SOURCE_DIR "/data/otp/de-ulm-rentalbike-journey.out.json") 0161 << s(SOURCE_DIR "/../src/lib/networks/de_bw_stadtnavi.json"); 0162 QTest::newRow("de-stadtnavi-carpool-journey") 0163 << s(SOURCE_DIR "/data/otp/de-stadtnavi-carpool-journey.in.json") 0164 << s(SOURCE_DIR "/data/otp/de-stadtnavi-carpool-journey.out.json") 0165 << s(SOURCE_DIR "/../src/lib/networks/de_bw_stadtnavi.json"); 0166 QTest::newRow("de-stadtnavi-bike-parking-journey") 0167 << s(SOURCE_DIR "/data/otp/de-stadtnavi-bike-parking-journey.in.json") 0168 << s(SOURCE_DIR "/data/otp/de-stadtnavi-bike-parking-journey.out.json") 0169 << s(SOURCE_DIR "/../src/lib/networks/de_bw_stadtnavi.json"); 0170 QTest::newRow("no-entur-navigation-guides") 0171 << s(SOURCE_DIR "/data/otp/no-entur-navigation-guides.in.json") 0172 << s(SOURCE_DIR "/data/otp/no-entur-navigation-guides.out.json") 0173 << QString(); 0174 } 0175 0176 void testParseJourney() 0177 { 0178 QFETCH(QString, inFileName); 0179 QFETCH(QString, refFileName); 0180 QFETCH(QString, networkConfig); 0181 0182 const auto configObj = QJsonDocument::fromJson(Test::readFile(networkConfig)).object(); 0183 const auto networkConfigObj = configObj.value(QLatin1String("options")).toObject().value(QLatin1String("rentalVehicleNetworks")).toObject(); 0184 QHash <QString, RentalVehicleNetwork> rentalVehicleNetworks; 0185 for (auto it = networkConfigObj.begin(); it != networkConfigObj.end(); ++it) { 0186 auto n = RentalVehicleNetwork::fromJson(it.value().toObject()); 0187 rentalVehicleNetworks.insert(it.key(), std::move(n)); 0188 } 0189 0190 OpenTripPlannerParser p(s("gtfs"), s("1")); 0191 p.setKnownRentalVehicleNetworks(rentalVehicleNetworks); 0192 const auto res = p.parseJourneys(QJsonDocument::fromJson(Test::readFile(inFileName)).object()); 0193 const auto jsonRes = Journey::toJson(res); 0194 0195 const auto ref = QJsonDocument::fromJson(Test::readFile(refFileName)).array(); 0196 0197 QVERIFY(!jsonRes.empty()); 0198 QVERIFY(Test::compareJson(refFileName, jsonRes, ref)); 0199 } 0200 }; 0201 0202 QTEST_GUILESS_MAIN(OtpParserTest) 0203 0204 #include "otpparsertest.moc"