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 
0009 #include "backends/hafasvehiclelayoutparser.cpp"
0010 
0011 #include <QFile>
0012 #include <QJsonObject>
0013 #include <QJsonDocument>
0014 #include <QJsonValue>
0015 #include <QTest>
0016 
0017 #define s(x) QStringLiteral(x)
0018 
0019 using namespace KPublicTransport;
0020 
0021 class HafasVehicleLayoutParserTest : public QObject
0022 {
0023     Q_OBJECT
0024 private:
0025     QByteArray readFile(const QString &fn)
0026     {
0027         QFile f(fn);
0028         f.open(QFile::ReadOnly);
0029         return f.readAll();
0030     }
0031 
0032 private Q_SLOTS:
0033     void testPlatformParse_stcL_data()
0034     {
0035         QTest::addColumn<QString>("inFileName");
0036         QTest::addColumn<QString>("vehicleFileName");
0037 
0038         QTest::newRow("sbb")
0039             << s(SOURCE_DIR "/data/hafas/stcL-sbb-input.json")
0040             << s(SOURCE_DIR "/data/hafas/stcL-sbb-vehicles.json");
0041     }
0042 
0043     void testPlatformParse_stcL()
0044     {
0045         QFETCH(QString, inFileName);
0046         QFETCH(QString, vehicleFileName);
0047 
0048         const auto vehicles = HafasVehicleLayoutParser::parseVehicleLayouts(QJsonDocument::fromJson(readFile(inFileName)).object());
0049         const auto vehicleJson = Vehicle::toJson(vehicles);
0050         const auto vehicleRef = QJsonDocument::fromJson(readFile(vehicleFileName)).array();
0051         QVERIFY(!vehicleJson.isEmpty());
0052         Test::compareJson(vehicleFileName, vehicleJson, vehicleRef);
0053     }
0054 
0055     void testVehicleLayoutParse_data()
0056     {
0057         QTest::addColumn<QString>("inFileName");
0058         QTest::addColumn<QString>("vehicleFileName");
0059 
0060         QTest::newRow("sbb-ic-bern")
0061             << s(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-ic-train-formation-bern-input.json")
0062             << s(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-ic-train-formation-bern-vehicle.json");
0063 
0064         QTest::newRow("sbb-ic-visp")
0065             << s(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-ic-train-formation-visp-input.json")
0066             << s(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-ic-train-formation-visp-vehicle.json");
0067 
0068         QTest::newRow("sbb-split-layout")
0069             << s(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-split-layout-train-formation-input.json")
0070             << s(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-split-layout-train-formation-vehicle.json");
0071     }
0072 
0073     void testVehicleLayoutParse()
0074     {
0075         QFETCH(QString, inFileName);
0076         QFETCH(QString, vehicleFileName);
0077 
0078         const auto vehicle = HafasVehicleLayoutParser::parseTrainFormation(readFile(inFileName));
0079         const auto vehicleJson = Vehicle::toJson(vehicle);
0080         const auto vehicleRef = QJsonDocument::fromJson(readFile(vehicleFileName)).object();
0081         QVERIFY(!vehicleJson.isEmpty());
0082         Test::compareJson(vehicleFileName, vehicleJson, vehicleRef);
0083     }
0084 
0085     void testPlatformParseXml_data()
0086     {
0087         QTest::addColumn<QString>("inFileName");
0088         QTest::addColumn<QString>("platformFileName");
0089 
0090         QTest::newRow("sbb-bern")
0091             << s(SOURCE_DIR "/data/hafas/rem-I-XP-sbb-platform-sectors-bern.xml")
0092             << s(SOURCE_DIR "/data/hafas/rem-I-XP-sbb-platform-bern.json");
0093         QTest::newRow("sbb-visp")
0094             << s(SOURCE_DIR "/data/hafas/rem-I-XP-sbb-platform-sectors-visp.xml")
0095             << s(SOURCE_DIR "/data/hafas/rem-I-XP-sbb-platform-visp.json");
0096     }
0097 
0098     void testPlatformParseXml()
0099     {
0100         QFETCH(QString, inFileName);
0101         QFETCH(QString, platformFileName);
0102 
0103         const auto platform = HafasVehicleLayoutParser::parsePlatformSectors(readFile(inFileName));
0104         const auto platformJson = Platform::toJson(platform);
0105         const auto platformRef = QJsonDocument::fromJson(readFile(platformFileName)).object();
0106         QVERIFY(!platformJson.isEmpty());
0107         Test::compareJson(platformFileName, platformJson, platformRef);
0108     }
0109 
0110     void testPlatformParse_tcpdL_data()
0111     {
0112         QTest::addColumn<QString>("inFileName");
0113         QTest::addColumn<QString>("platformFileName");
0114 
0115         QTest::newRow("sbb")
0116             << s(SOURCE_DIR "/data/hafas/tcpdL-sbb-input.json")
0117             << s(SOURCE_DIR "/data/hafas/tcpdL-sbb-platforms.json");
0118     }
0119 
0120     void testPlatformParse_tcpdL()
0121     {
0122         QFETCH(QString, inFileName);
0123         QFETCH(QString, platformFileName);
0124 
0125         const auto platforms = HafasVehicleLayoutParser::parsePlatforms(QJsonDocument::fromJson(readFile(inFileName)).object());
0126         const auto platformJson = Platform::toJson(platforms);
0127         const auto platformRef = QJsonDocument::fromJson(readFile(platformFileName)).array();
0128         QVERIFY(!platformJson.isEmpty());
0129         Test::compareJson(platformFileName, platformJson, platformRef);
0130     }
0131 };
0132 
0133 QTEST_GUILESS_MAIN(HafasVehicleLayoutParserTest)
0134 
0135 #include "hafasvehiclelayoutparsertest.moc"