File indexing completed on 2024-05-12 05:13:47
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelper.h" 0008 0009 #include "timelinedelegatecontroller.h" 0010 #include "applicationcontroller.h" 0011 #include "livedatamanager.h" 0012 #include "reservationmanager.h" 0013 #include "transfermanager.h" 0014 0015 #include <KItinerary/Reservation> 0016 #include <KItinerary/TrainTrip> 0017 0018 #include <KPublicTransport/Journey> 0019 #include <KPublicTransport/JourneyRequest> 0020 0021 #include <QJsonDocument> 0022 #include <QJsonObject> 0023 #include <QJSValue> 0024 #include <QUrl> 0025 #include <QQmlEngine> 0026 #include <QtTest/qtest.h> 0027 #include <QSignalSpy> 0028 #include <QStandardPaths> 0029 #include <QTimeZone> 0030 0031 using namespace KItinerary; 0032 0033 class TimelineDelegateControllerTest : public QObject 0034 { 0035 Q_OBJECT 0036 private: 0037 QByteArray readFile(const QString &fn) 0038 { 0039 QFile f(fn); 0040 f.open(QFile::ReadOnly); 0041 return f.readAll(); 0042 } 0043 0044 private Q_SLOTS: 0045 void initTestCase() 0046 { 0047 qputenv("TZ", "UTC"); 0048 QStandardPaths::setTestModeEnabled(true); 0049 } 0050 0051 void testEmptyController() 0052 { 0053 TimelineDelegateController controller; 0054 QCOMPARE(controller.isCurrent(), false); 0055 QCOMPARE(controller.progress(), 0.0f); 0056 QCOMPARE(controller.effectiveEndTime(), QDateTime()); 0057 QCOMPARE(controller.isLocationChange(), false); 0058 QCOMPARE(controller.isPublicTransport(), false); 0059 QVERIFY(!controller.journeyRequestFull().isValid()); 0060 QVERIFY(!controller.journeyRequestOne().isValid()); 0061 QCOMPARE(controller.isCanceled(), false); 0062 0063 controller.setBatchId(QStringLiteral("foo")); 0064 QCOMPARE(controller.isCurrent(), false); 0065 QCOMPARE(controller.progress(), 0.0f); 0066 QCOMPARE(controller.effectiveEndTime(), QDateTime()); 0067 QCOMPARE(controller.isLocationChange(), false); 0068 QCOMPARE(controller.isPublicTransport(), false); 0069 QCOMPARE(controller.isCanceled(), false); 0070 0071 ReservationManager mgr; 0072 controller.setReservationManager(&mgr); 0073 QCOMPARE(controller.isCurrent(), false); 0074 QCOMPARE(controller.progress(), 0.0f); 0075 QCOMPARE(controller.effectiveEndTime(), QDateTime()); 0076 QCOMPARE(controller.isLocationChange(), false); 0077 QCOMPARE(controller.isPublicTransport(), false); 0078 QCOMPARE(controller.isCanceled(), false); 0079 QCOMPARE(controller.documentIds(), QStringList()); 0080 } 0081 0082 void testProgress() 0083 { 0084 ReservationManager mgr; 0085 Test::clearAll(&mgr); 0086 0087 TrainTrip trip; 0088 trip.setTrainNumber(QStringLiteral("TGV 1235")); 0089 trip.setDepartureTime(QDateTime::currentDateTime().addDays(-1)); 0090 TrainReservation res; 0091 res.setReservationNumber(QStringLiteral("XXX007")); 0092 res.setReservationFor(trip); 0093 0094 TimelineDelegateController controller; 0095 QSignalSpy currentSpy(&controller, &TimelineDelegateController::currentChanged); 0096 controller.setReservationManager(&mgr); 0097 0098 mgr.addReservation(res); 0099 QCOMPARE(mgr.batches().size(), 1); 0100 const auto batchId = mgr.batches().at(0); 0101 0102 controller.setBatchId(batchId); 0103 QCOMPARE(controller.isCurrent(), false); 0104 QCOMPARE(controller.progress(), 0.0f); 0105 QCOMPARE(controller.isLocationChange(), true); 0106 QCOMPARE(controller.isPublicTransport(), true); 0107 QCOMPARE(controller.isCanceled(), false); 0108 0109 trip.setArrivalTime(QDateTime::currentDateTime().addDays(1)); 0110 res.setReservationFor(trip); 0111 mgr.updateReservation(batchId, res); 0112 0113 QCOMPARE(controller.isCurrent(), true); 0114 QCOMPARE(controller.progress(), 0.5f); 0115 QCOMPARE(controller.effectiveEndTime(), trip.arrivalTime()); 0116 QCOMPARE(currentSpy.size(), 1); 0117 } 0118 0119 void testPreviousLocation() 0120 { 0121 ReservationManager mgr; 0122 Test::clearAll(&mgr); 0123 0124 TimelineDelegateController controller; 0125 controller.setReservationManager(&mgr); 0126 0127 { 0128 TrainTrip trip; 0129 trip.setTrainNumber(QStringLiteral("TGV 1235")); 0130 trip.setDepartureTime(QDateTime::currentDateTime().addDays(2)); 0131 TrainReservation res; 0132 res.setReservationNumber(QStringLiteral("XXX007")); 0133 res.setReservationFor(trip); 0134 mgr.addReservation(res); 0135 } 0136 0137 QCOMPARE(mgr.batches().size(), 1); 0138 const auto batchId = mgr.batches().at(0); 0139 0140 controller.setBatchId(batchId); 0141 QCOMPARE(controller.previousLocation(), QVariant()); 0142 0143 TrainStation arrStation; 0144 arrStation.setName(QStringLiteral("My Station")); 0145 TrainTrip prevTrip; 0146 prevTrip.setTrainNumber(QStringLiteral("ICE 1234")); 0147 prevTrip.setDepartureTime(QDateTime::currentDateTime().addDays(1)); 0148 prevTrip.setArrivalTime(QDateTime::currentDateTime().addDays(1)); 0149 prevTrip.setArrivalStation(arrStation); 0150 TrainReservation prevRes; 0151 prevRes.setReservationNumber(QStringLiteral("XXX007")); 0152 prevRes.setReservationFor(prevTrip); 0153 0154 QSignalSpy changeSpy(&controller, &TimelineDelegateController::previousLocationChanged); 0155 mgr.addReservation(prevRes); 0156 0157 QCOMPARE(changeSpy.size(), 1); 0158 QVERIFY(!controller.previousLocation().isNull()); 0159 QCOMPARE(controller.previousLocation().value<TrainStation>().name(), QLatin1StringView("My Station")); 0160 } 0161 0162 void testJourneyRequest() 0163 { 0164 ReservationManager mgr; 0165 PkPassManager pkPassMgr; 0166 Test::clearAll(&mgr); 0167 LiveDataManager ldm; 0168 ldm.setPkPassManager(&pkPassMgr); 0169 auto ctrl = Test::makeAppController(); 0170 ctrl->setReservationManager(&mgr); 0171 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/randa2017.json"))); 0172 0173 TimelineDelegateController controller; 0174 controller.setReservationManager(&mgr); 0175 controller.setBatchId(mgr.batches().at(0)); // flight 0176 controller.setLiveDataManager(&ldm); 0177 QVERIFY(!controller.journeyRequestFull().isValid()); 0178 QVERIFY(!controller.journeyRequestOne().isValid()); 0179 0180 controller.setBatchId(mgr.batches().at(1)); // first train segment 0181 QCOMPARE(controller.isLocationChange(), true); 0182 QCOMPARE(controller.isPublicTransport(), true); 0183 0184 auto jnyReq = controller.journeyRequestFull(); 0185 QCOMPARE(jnyReq.isValid(), true); 0186 QCOMPARE(jnyReq.from().name(), QStringLiteral("Zürich Flughafen")); 0187 QCOMPARE(jnyReq.to().name(), QLatin1StringView("Randa")); 0188 jnyReq = controller.journeyRequestOne(); 0189 QCOMPARE(jnyReq.isValid(), true); 0190 QCOMPARE(jnyReq.from().name(), QStringLiteral("Zürich Flughafen")); 0191 QCOMPARE(jnyReq.to().name(), QLatin1StringView("Visp")); 0192 0193 controller.setBatchId(mgr.batches().at(2)); // second train segment 0194 jnyReq = controller.journeyRequestFull(); 0195 QCOMPARE(jnyReq.isValid(), true); 0196 QCOMPARE(jnyReq.from().name(), QLatin1StringView("Visp")); 0197 QCOMPARE(jnyReq.to().name(), QLatin1StringView("Randa")); 0198 jnyReq = controller.journeyRequestOne(); 0199 QCOMPARE(jnyReq.isValid(), true); 0200 QCOMPARE(jnyReq.from().name(), QLatin1StringView("Visp")); 0201 QCOMPARE(jnyReq.to().name(), QLatin1StringView("Randa")); 0202 } 0203 0204 void testApplyJourney() 0205 { 0206 ReservationManager mgr; 0207 PkPassManager pkPassMgr; 0208 Test::clearAll(&mgr); 0209 LiveData::clearStorage(); 0210 LiveDataManager ldm; 0211 ldm.setPkPassManager(&pkPassMgr); 0212 ldm.setReservationManager(&mgr); 0213 auto ctrl = Test::makeAppController(); 0214 ctrl->setReservationManager(&mgr); 0215 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/randa2017.json"))); 0216 0217 TimelineDelegateController controller; 0218 controller.setReservationManager(&mgr); 0219 controller.setLiveDataManager(&ldm); 0220 controller.setBatchId(mgr.batches().at(mgr.batches().size() - 3)); // begin of the return train trip 0221 QCOMPARE(controller.isPublicTransport(), true); 0222 const auto batchCount = mgr.batches().size(); 0223 0224 QSignalSpy addSpy(&mgr, &ReservationManager::batchAdded); 0225 QSignalSpy updateSpy(&mgr, &ReservationManager::batchChanged); 0226 QSignalSpy rmSpy(&mgr, &ReservationManager::batchRemoved); 0227 0228 // apply alternative with 3 segments to test segment insertion 0229 const auto jny3 = KPublicTransport::Journey::fromJson(QJsonDocument::fromJson(readFile(QLatin1StringView(SOURCE_DIR "/data/publictransport/randa-zrh-3-sections.json"))).object()); 0230 controller.applyJourney(QVariant::fromValue(jny3), true); 0231 QCOMPARE(mgr.batches().size(), batchCount + 1); 0232 QCOMPARE(addSpy.size(), 3); 0233 QCOMPARE(updateSpy.size(), 0); // as we move beyond other elements, we get add/remove rather than updated here 0234 QCOMPARE(rmSpy.size(), 2); 0235 QCOMPARE(LiveData::listAll().size(), 3); 0236 0237 // apply alternative with 2 segments to test segment removal 0238 controller.setBatchId(mgr.batches().at(mgr.batches().size() - 3)); // begin of the new 3 segment train trip 0239 addSpy.clear(); 0240 updateSpy.clear(); 0241 rmSpy.clear(); 0242 const auto jny2 = KPublicTransport::Journey::fromJson(QJsonDocument::fromJson(readFile(QLatin1StringView(SOURCE_DIR "/data/publictransport/randa-zrh-2-sections.json"))).object()); 0243 controller.applyJourney(QVariant::fromValue(jny2), true); 0244 QCOMPARE(mgr.batches().size(), batchCount); 0245 QCOMPARE(addSpy.size(), 2); 0246 QCOMPARE(updateSpy.size(), 0); 0247 QCOMPARE(rmSpy.size(), 3); 0248 QCOMPARE(LiveData::listAll().size(), 2); 0249 } 0250 0251 void testCancel() 0252 { 0253 ReservationManager mgr; 0254 Test::clearAll(&mgr); 0255 auto ctrl = Test::makeAppController(); 0256 ctrl->setReservationManager(&mgr); 0257 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/data/timeline/flight-cancelation.json"))); 0258 0259 TimelineDelegateController controller; 0260 controller.setReservationManager(&mgr); 0261 controller.setBatchId(mgr.batches().at(0)); 0262 QCOMPARE(controller.isCanceled(), true); 0263 QCOMPARE(controller.connectionWarning(), false); 0264 } 0265 0266 void testMapArgs() 0267 { 0268 ReservationManager mgr; 0269 PkPassManager pkPassMgr; 0270 Test::clearAll(&mgr); 0271 LiveData::clearStorage(); 0272 LiveDataManager ldm; 0273 ldm.setPkPassManager(&pkPassMgr); 0274 ldm.setReservationManager(&mgr); 0275 TransferManager trfMgr; 0276 auto ctrl = Test::makeAppController(); 0277 ctrl->setReservationManager(&mgr); 0278 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/randa2017.json"))); 0279 0280 TimelineDelegateController controller; 0281 controller.setReservationManager(&mgr); 0282 controller.setLiveDataManager(&ldm); 0283 controller.setTransferManager(&trfMgr); 0284 0285 QQmlEngine engine; 0286 QQmlEngine::setObjectOwnership(&controller, QQmlEngine::CppOwnership); 0287 engine.newQObject(&controller); 0288 0289 // workaround for pre-KF5I18nLocaleData code for region lookups still in use on the CI 0290 const auto isRegion = [](const QString ®ion, QLatin1StringView ref) { 0291 if (region.size() == 2) { 0292 return ref.startsWith(region); 0293 } 0294 return region == ref; 0295 }; 0296 0297 controller.setBatchId(mgr.batches().at(0)); // flight 0298 auto args = controller.departureMapArguments().toVariant().toMap(); 0299 QCOMPARE(args.value(QLatin1StringView("departureGateName")).toString(), QLatin1StringView("A10")); 0300 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 10}, {6, 45}, QTimeZone("Europe/Berlin"))); 0301 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Berlin Tegel")); 0302 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("DE-BE"))); 0303 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Berlin")); 0304 0305 args = controller.arrivalMapArguments().toVariant().toMap(); 0306 // arrivalGate property doesn't exist 0307 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {8, 15}, QTimeZone("Europe/Zurich"))); 0308 QCOMPARE(args.value(QLatin1StringView("departurePlatformMode")).toInt(), 1); 0309 QCOMPARE(args.value(QLatin1StringView("departurePlatformName")).toString(), QLatin1StringView("3")); 0310 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 10}, {11, 40}, QTimeZone("Europe/Zurich"))); 0311 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QStringLiteral("Zürich")); 0312 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-ZH"))); 0313 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0314 0315 controller.setBatchId(mgr.batches().at(1)); // first train leg 0316 args = controller.departureMapArguments().toVariant().toMap(); 0317 // arrivalGate property doesn't exist 0318 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {8, 15}, QTimeZone("Europe/Zurich"))); 0319 QCOMPARE(args.value(QLatin1StringView("departurePlatformMode")).toInt(), 1); 0320 QCOMPARE(args.value(QLatin1StringView("departurePlatformName")).toString(), QLatin1StringView("3")); 0321 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 10}, {11, 40}, QTimeZone("Europe/Zurich"))); 0322 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QStringLiteral("Zürich Flughafen")); 0323 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-ZH"))); 0324 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0325 0326 args = controller.arrivalMapArguments().toVariant().toMap(); 0327 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformMode")).toInt(), 1); 0328 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformName")).toString(), QLatin1StringView("7")); 0329 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 2}, QTimeZone("Europe/Zurich"))); 0330 QCOMPARE(args.value(QLatin1StringView("departurePlatformMode")).toInt(), 1); 0331 QCOMPARE(args.value(QLatin1StringView("departurePlatformName")).toString(), QLatin1StringView("3")); 0332 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 8}, QTimeZone("Europe/Zurich"))); 0333 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Visp")); 0334 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-VS"))); 0335 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0336 0337 controller.setBatchId(mgr.batches().at(2)); // final train leg 0338 args = controller.departureMapArguments().toVariant().toMap(); 0339 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformMode")).toInt(), 1); 0340 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformName")).toString(), QLatin1StringView("7")); 0341 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 2}, QTimeZone("Europe/Zurich"))); 0342 QCOMPARE(args.value(QLatin1StringView("departurePlatformMode")).toInt(), 1); 0343 QCOMPARE(args.value(QLatin1StringView("departurePlatformName")).toString(), QLatin1StringView("3")); 0344 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 8}, QTimeZone("Europe/Zurich"))); 0345 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Visp")); 0346 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-VS"))); 0347 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0348 0349 args = controller.arrivalMapArguments().toVariant().toMap(); 0350 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformMode")).toInt(), 1); 0351 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformName")).toString(), QString()); 0352 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 53}, QTimeZone("Europe/Zurich"))); 0353 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Randa")); 0354 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-VS"))); 0355 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0356 0357 controller.setBatchId(mgr.batches().at(3)); // event 0358 args = controller.mapArguments().toVariant().toMap(); 0359 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Haus Randa")); 0360 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-VS"))); 0361 auto coord = args.value(QLatin1StringView("coordinate")).value<QPointF>(); 0362 QVERIFY(!coord.isNull()); 0363 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 53}, QTimeZone("Europe/Zurich"))); 0364 QVERIFY(!args.value(QLatin1StringView("endTime")).toDateTime().isValid()); 0365 0366 controller.setBatchId(mgr.batches().at(4)); // accommodation 0367 args = controller.mapArguments().toVariant().toMap(); 0368 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Haus Randa")); 0369 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-VS"))); 0370 coord = args.value(QLatin1StringView("coordinate")).value<QPointF>(); 0371 QVERIFY(!coord.isNull()); 0372 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {14, 53}, QTimeZone("Europe/Zurich"))); 0373 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 15}, {14, 54}, QTimeZone("Europe/Zurich"))); 0374 0375 controller.setBatchId(mgr.batches().at(7)); // food 0376 args = controller.mapArguments().toVariant().toMap(); 0377 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Raclette")); 0378 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-VS"))); 0379 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 14}, {0, 0}, QTimeZone("Europe/Zurich"))); 0380 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 15}, {0, 0}, QTimeZone("Europe/Zurich"))); 0381 0382 controller.setBatchId(mgr.batches().at(9)); // final return leg 0383 args = controller.arrivalMapArguments().toVariant().toMap(); 0384 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformMode")).toInt(), 1); 0385 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformName")).toString(), QLatin1StringView("2")); 0386 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 15}, {18, 16}, QTimeZone("Europe/Zurich"))); 0387 QCOMPARE(args.value(QLatin1StringView("departureGateName")).toString(), QLatin1StringView("52")); 0388 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 15}, {20, 50}, QTimeZone("Europe/Zurich"))); 0389 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QStringLiteral("Zürich Flughafen")); 0390 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-ZH"))); 0391 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0392 coord = args.value(QLatin1StringView("coordinate")).value<QPointF>(); 0393 QVERIFY(!coord.isNull()); 0394 0395 controller.setBatchId(mgr.batches().at(10)); // return flight 0396 args = controller.departureMapArguments().toVariant().toMap(); 0397 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformMode")).toInt(), 1); 0398 QCOMPARE(args.value(QLatin1StringView("arrivalPlatformName")).toString(), QLatin1StringView("2")); 0399 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 15}, {18, 16}, QTimeZone("Europe/Zurich"))); 0400 QCOMPARE(args.value(QLatin1StringView("departureGateName")).toString(), QLatin1StringView("52")); 0401 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 15}, {20, 50}, QTimeZone("Europe/Zurich"))); 0402 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QStringLiteral("Zürich")); 0403 QVERIFY(isRegion(args.value(QLatin1StringView("region")).toString(), QLatin1StringView("CH-ZH"))); 0404 QCOMPARE(args.value(QLatin1StringView("timeZone")), QLatin1StringView("Europe/Zurich")); 0405 0406 // single static element, see 44ed4fbe96d45a60b33e2bf784196489197d7dcc 0407 Test::clearAll(&mgr); 0408 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/data/haus-randa-v1.json"))); 0409 QCOMPARE(mgr.batches().size(), 1); 0410 controller.setBatchId(mgr.batches().at(0)); 0411 args = controller.mapArguments().toVariant().toMap(); 0412 QCOMPARE(args.value(QLatin1StringView("placeName")).toString(), QLatin1StringView("Haus Randa")); 0413 QCOMPARE(args.value(QLatin1StringView("beginTime")).toDateTime(), QDateTime({2017, 9, 10}, {0, 0}, QTimeZone("Europe/Zurich"))); 0414 QCOMPARE(args.value(QLatin1StringView("endTime")).toDateTime(), QDateTime({2017, 9, 16}, {0, 0}, QTimeZone("Europe/Zurich"))); 0415 } 0416 }; 0417 0418 QTEST_GUILESS_MAIN(TimelineDelegateControllerTest) 0419 0420 #include "timelinedelegatecontrollertest.moc"