File indexing completed on 2024-03-24 04:43:43
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/deutschebahnvehiclelayoutparser.cpp" 0010 #include "uic/uicrailwaycoach.cpp" 0011 0012 #include <QFile> 0013 #include <QJsonObject> 0014 #include <QJsonDocument> 0015 #include <QJsonValue> 0016 #include <QTest> 0017 #include <QTimeZone> 0018 0019 #define s(x) QStringLiteral(x) 0020 0021 using namespace KPublicTransport; 0022 0023 class DbParserTest : public QObject 0024 { 0025 Q_OBJECT 0026 private: 0027 QByteArray readFile(const QString &fn) 0028 { 0029 QFile f(fn); 0030 f.open(QFile::ReadOnly); 0031 return f.readAll(); 0032 } 0033 0034 private Q_SLOTS: 0035 void initTestCase() 0036 { 0037 qputenv("TZ", "UTC"); 0038 qRegisterMetaType<Disruption::Effect>(); 0039 } 0040 0041 void testVehicleLayoutParse_data() 0042 { 0043 QTest::addColumn<QString>("inFileName"); 0044 QTest::addColumn<QString>("departureFileName"); 0045 0046 QTest::newRow("valid-double-segment-ice") 0047 << s(SOURCE_DIR "/data/deutschebahn/double-segment-ice-input.json") 0048 << s(SOURCE_DIR "/data/deutschebahn/double-segment-ice-departure.json"); 0049 0050 QTest::newRow("valid-double-deck-ic") 0051 << s(SOURCE_DIR "/data/deutschebahn/double-deck-ic-input.json") 0052 << s(SOURCE_DIR "/data/deutschebahn/double-deck-ic-departure.json"); 0053 0054 QTest::newRow("no-position") 0055 << s(SOURCE_DIR "/data/deutschebahn/no-position-input.json") 0056 << s(SOURCE_DIR "/data/deutschebahn/no-position-departure.json"); 0057 0058 QTest::newRow("regionalexpress") 0059 << s(SOURCE_DIR "/data/deutschebahn/regionalexpress-input.json") 0060 << s(SOURCE_DIR "/data/deutschebahn/regionalexpress-departure.json"); 0061 } 0062 0063 void testVehicleLayoutParse() 0064 { 0065 QFETCH(QString, inFileName); 0066 QFETCH(QString, departureFileName); 0067 0068 KPublicTransport::DeutscheBahnVehicleLayoutParser parser; 0069 0070 QVERIFY(parser.parse(readFile(inFileName))); 0071 QCOMPARE(parser.error, Reply::NoError); 0072 QVERIFY(parser.errorMessage.isEmpty()); 0073 0074 const auto departureJson = Stopover::toJson(parser.stopover); 0075 const auto departureRef = QJsonDocument::fromJson(readFile(departureFileName)).object(); 0076 QVERIFY(!departureJson.isEmpty()); 0077 QVERIFY(Test::compareJson(departureFileName, departureJson, departureRef)); 0078 } 0079 0080 void testVehicleLayoutParseFailure() 0081 { 0082 KPublicTransport::DeutscheBahnVehicleLayoutParser parser; 0083 0084 QVERIFY(!parser.parse(readFile(QStringLiteral(SOURCE_DIR "/data/deutschebahn/not-found-error.json")))); 0085 QCOMPARE(parser.error, Reply::NotFoundError); 0086 QVERIFY(!parser.errorMessage.isEmpty()); 0087 } 0088 }; 0089 0090 QTEST_GUILESS_MAIN(DbParserTest) 0091 0092 #include "deutschebahntest.moc"