File indexing completed on 2024-04-28 15:59:43
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"