File indexing completed on 2024-04-14 04:36:17

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 <KPublicTransport/Stopover>
0010 
0011 #include <QFile>
0012 #include <QJsonDocument>
0013 #include <QJsonObject>
0014 #include <QTest>
0015 
0016 #define s(x) QStringLiteral(x)
0017 
0018 using namespace KPublicTransport;
0019 
0020 class DepartureTest : public QObject
0021 {
0022     Q_OBJECT
0023 private:
0024     QByteArray readFile(const QString &fn) const
0025     {
0026         QFile f(fn);
0027         f.open(QFile::ReadOnly);
0028         return f.readAll();
0029     }
0030 
0031 private Q_SLOTS:
0032     void initTestCase()
0033     {
0034         qputenv("TZ", "Europe/Helsinki"); // something exotic, ie. something not used in the test data
0035         qRegisterMetaType<Disruption::Effect>();
0036     }
0037 
0038     void testDepartureMerge_data()
0039     {
0040         QTest::addColumn<QString>("baseName");
0041 
0042         QDir dir(QStringLiteral(SOURCE_DIR "/data/departures"));
0043         const auto lst = dir.entryList(QStringList(QStringLiteral("*.merged.json")), QDir::Files | QDir::Readable | QDir::NoSymLinks);
0044         for (const auto &file : lst) {
0045             const auto base = file.left(file.size() - 12);
0046             QTest::newRow(base.toLatin1().constData()) << (dir.path() + QLatin1Char('/') + base);
0047         }
0048     }
0049 
0050     void testDepartureMerge()
0051     {
0052         QFETCH(QString, baseName);
0053 
0054         const auto lhs = Stopover::fromJson(QJsonDocument::fromJson(readFile(baseName + QLatin1String(".lhs.json"))).object());
0055         const auto rhs = Stopover::fromJson(QJsonDocument::fromJson(readFile(baseName + QLatin1String(".rhs.json"))).object());
0056         const auto expected = QJsonDocument::fromJson(readFile(baseName + QLatin1String(".merged.json"))).object();
0057 
0058         QVERIFY(Stopover::isSame(lhs, rhs));
0059         QVERIFY(Stopover::isSame(rhs, lhs));
0060 
0061         const auto mergedL2R = Stopover::merge(lhs, rhs);
0062         QVERIFY(Test::compareJson(baseName + QLatin1String(".merged.json"), Stopover::toJson(mergedL2R), expected));
0063 
0064         const auto mergedR2L = Stopover::merge(rhs, lhs);
0065         QVERIFY(Test::compareJson(baseName + QLatin1String(".merged.json"), Stopover::toJson(mergedR2L), expected));
0066     }
0067 };
0068 
0069 QTEST_GUILESS_MAIN(DepartureTest)
0070 
0071 #include "departuretest.moc"