File indexing completed on 2024-05-05 13:08:10
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <KPublicTransport/Manager> 0008 #include <KPublicTransport/Stopover> 0009 #include <KPublicTransport/VehicleLayoutQueryModel> 0010 0011 #include <QAbstractItemModelTester> 0012 #include <QFile> 0013 #include <QJsonDocument> 0014 #include <QJsonObject> 0015 #include <QSignalSpy> 0016 #include <QTest> 0017 0018 using namespace KPublicTransport; 0019 0020 class VehicleLayoutQueryModelTest : public QObject 0021 { 0022 Q_OBJECT 0023 private: 0024 QByteArray readFile(const QString &fn) 0025 { 0026 QFile f(fn); 0027 f.open(QFile::ReadOnly); 0028 return f.readAll(); 0029 } 0030 0031 private Q_SLOTS: 0032 void testCoachPositionInterpolation() 0033 { 0034 Manager ptMgr; 0035 0036 VehicleLayoutQueryModel model; 0037 QAbstractItemModelTester modelTest(&model); 0038 model.setManager(&ptMgr); 0039 QSignalSpy resetSpy(&model, &QAbstractItemModel::modelReset); 0040 0041 const auto inVec = Vehicle::fromJson(QJsonDocument::fromJson(readFile(QStringLiteral(SOURCE_DIR "/data/hafas/rem-I-JF-sbb-ic-train-formation-bern-vehicle.json"))).object()); 0042 QCOMPARE(inVec.sections().size(), 10); 0043 QVERIFY(!inVec.hasPlatformPositions()); 0044 QVERIFY(inVec.hasPlatformSectionNames()); 0045 const auto inPlat = Platform::fromJson(QJsonDocument::fromJson(readFile(QStringLiteral(SOURCE_DIR "/data/hafas/rem-I-XP-sbb-platform-bern.json"))).object()); 0046 QVERIFY(!inPlat.sections().empty()); 0047 0048 Stopover s; 0049 s.setVehicleLayout(inVec); 0050 s.setPlatformLayout(inPlat); 0051 s.setScheduledDepartureTime(QDateTime::currentDateTime()); 0052 Line line; 0053 line.setName(QStringLiteral("IC 8")); 0054 Route route; 0055 route.setLine(line); 0056 s.setRoute(route); 0057 0058 VehicleLayoutRequest req(s); 0059 QVERIFY(req.isValid()); 0060 model.setRequest(req); 0061 QVERIFY(resetSpy.wait(10)); // query is started, initial requested data is set 0062 QCOMPARE(model.rowCount(), 10); 0063 resetSpy.clear(); 0064 QVERIFY(resetSpy.wait(10)); // query finished, interpolation is triggered 0065 QCOMPARE(model.rowCount(), 10); 0066 0067 for (int i = 0; i < model.rowCount(); ++i) { 0068 const auto idx = model.index(i, 0); 0069 const auto sec = idx.data(VehicleLayoutQueryModel::VehicleSectionRole).value<VehicleSection>(); 0070 QVERIFY(sec.hasPlatformPosition()); 0071 QCOMPARE(sec.name(), inVec.sections()[i].name()); 0072 } 0073 } 0074 }; 0075 0076 QTEST_GUILESS_MAIN(VehicleLayoutQueryModelTest) 0077 0078 #include "vehiclelayoutquerymodeltest.moc"