File indexing completed on 2024-04-21 04:41:08
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelpers.h" 0008 0009 #include <KPublicTransport/Attribution> 0010 #include <KPublicTransport/Journey> 0011 #include <KPublicTransport/Line> 0012 #include <KPublicTransport/NavitiaParser> 0013 #include <KPublicTransport/RentalVehicle> 0014 #include <KPublicTransport/Stopover> 0015 0016 #include <QFile> 0017 #include <QJsonDocument> 0018 #include <QTest> 0019 #include <QTimeZone> 0020 0021 #define s(x) QStringLiteral(x) 0022 0023 using namespace KPublicTransport; 0024 0025 class NavitiaParserTest : public QObject 0026 { 0027 Q_OBJECT 0028 private Q_SLOTS: 0029 void initTestCase() 0030 { 0031 qputenv("TZ", "UTC"); 0032 qRegisterMetaType<KPublicTransport::RentalVehicle>(); 0033 } 0034 0035 void testParseJourney_data() 0036 { 0037 QTest::addColumn<QString>("inFileName"); 0038 QTest::addColumn<QString>("refFileName"); 0039 QTest::addColumn<QString>("attrRefFileName"); 0040 0041 QTest::newRow("journey") 0042 << s(SOURCE_DIR "/data/navitia/journey-response.json") 0043 << s(SOURCE_DIR "/data/navitia/journey-response.out.json") 0044 << s(SOURCE_DIR "/data/navitia/journey-response.attr.json"); 0045 QTest::newRow("journey-bss-path-no-instr-start-coord") 0046 << s(SOURCE_DIR "/data/navitia/journey-bss-path-no-instr-start-coord.json") 0047 << s(SOURCE_DIR "/data/navitia/journey-bss-path-no-instr-start-coord.out.json") 0048 << s(SOURCE_DIR "/data/navitia/journey-bss-path-no-instr-start-coord.attr.json"); 0049 } 0050 0051 void testParseJourney() 0052 { 0053 QFETCH(QString, inFileName); 0054 QFETCH(QString, refFileName); 0055 QFETCH(QString, attrRefFileName); 0056 0057 NavitiaParser parser; 0058 const auto res = parser.parseJourneys(Test::readFile(inFileName)); 0059 const auto jsonRes = Journey::toJson(res); 0060 0061 const auto ref = QJsonDocument::fromJson(Test::readFile(refFileName)).array(); 0062 QVERIFY(Test::compareJson(refFileName, jsonRes, ref)); 0063 0064 QVERIFY(parser.nextLink.isValid()); 0065 QVERIFY(parser.prevLink.isValid()); 0066 0067 const auto attrRes = Attribution::toJson(parser.attributions); 0068 const auto attrRef = QJsonDocument::fromJson(Test::readFile(attrRefFileName)).array(); 0069 QVERIFY(Test::compareJson(attrRefFileName, attrRes, attrRef)); 0070 } 0071 0072 void testParseDepartures() 0073 { 0074 KPublicTransport::NavitiaParser parser; 0075 const auto res = parser.parseDepartures(Test::readFile(s(SOURCE_DIR "/data/navitia/departure-response.json"))); 0076 QCOMPARE(res.size(), 10); 0077 0078 { 0079 const auto departure = res[0]; 0080 QCOMPARE(departure.scheduledDepartureTime(), QDateTime({2018, 12, 10}, {17, 17}, QTimeZone("Europe/Paris"))); 0081 QCOMPARE(departure.hasExpectedDepartureTime(), false); 0082 QCOMPARE(departure.scheduledArrivalTime(), QDateTime({2018, 12, 10}, {17, 17}, QTimeZone("Europe/Paris"))); 0083 QCOMPARE(departure.hasExpectedArrivalTime(), false); 0084 QCOMPARE(departure.stopPoint().name(), QStringLiteral("Gare de Lyon - Diderot (Paris)")); 0085 QCOMPARE(departure.route().direction(), QStringLiteral("Porte de la Chapelle (Paris)")); 0086 QCOMPARE(departure.route().line().mode(), KPublicTransport::Line::Bus); 0087 QCOMPARE(departure.route().line().name(), QStringLiteral("65")); 0088 QCOMPARE(departure.route().line().color(), QColor(0x00, 0x8b, 0x5a)); 0089 QVERIFY(!departure.route().destination().isEmpty()); 0090 QVERIFY(departure.route().destination().hasCoordinate()); 0091 QCOMPARE(departure.route().direction(), departure.route().destination().name()); 0092 } 0093 0094 { 0095 const auto departure = res[3]; 0096 QCOMPARE(departure.scheduledDepartureTime(), QDateTime({2018, 12, 10}, {17, 19}, QTimeZone("Europe/Paris"))); 0097 QCOMPARE(departure.hasExpectedDepartureTime(), true); 0098 QCOMPARE(departure.expectedDepartureTime(), QDateTime({2018, 12, 10}, {17, 21}, QTimeZone("Europe/Paris"))); 0099 QCOMPARE(departure.stopPoint().name(), QStringLiteral("Gare de Lyon RER D (Paris)")); 0100 QCOMPARE(departure.route().direction(), QStringLiteral("Gare de Villiers le Bel Gonesse Arnouville (Arnouville)")); 0101 QCOMPARE(departure.route().line().mode(), KPublicTransport::Line::RapidTransit); 0102 QCOMPARE(departure.route().line().modeString(), QStringLiteral("RER")); 0103 QCOMPARE(departure.route().line().name(), QStringLiteral("D")); 0104 QCOMPARE(departure.route().line().color(), QColor(0x5E, 0x96, 0x20)); 0105 QVERIFY(!departure.route().destination().isEmpty()); 0106 QVERIFY(departure.route().destination().hasCoordinate()); 0107 QCOMPARE(departure.route().destination().name(), QStringLiteral("Gare de Goussainville (Goussainville)")); 0108 } 0109 0110 QCOMPARE(parser.attributions.size(), 2); 0111 const auto &attr = parser.attributions.at(0); 0112 QCOMPARE(attr.name(), QStringLiteral("openstreetmap")); 0113 QCOMPARE(attr.license(), QStringLiteral("ODbL")); 0114 QEXPECT_FAIL("", "not implemented yet", Continue); 0115 QCOMPARE(attr.licenseUrl().host(), QStringLiteral("spdx.org")); 0116 QCOMPARE(attr.url().host(), QStringLiteral("www.openstreetmap.org")); 0117 } 0118 }; 0119 0120 QTEST_GUILESS_MAIN(NavitiaParserTest) 0121 0122 #include "navitiaparsertest.moc"