File indexing completed on 2024-04-21 04:41:07

0001 /*
0002     SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <knowledgedb/linemetadata.h>
0008 
0009 #include <QObject>
0010 #include <QTest>
0011 
0012 using namespace KPublicTransport;
0013 
0014 #define s(x) QStringLiteral(x)
0015 
0016 class LineMetaDataTest : public QObject
0017 {
0018     Q_OBJECT
0019 private Q_SLOTS:
0020     void testLookup_data()
0021     {
0022         QTest::addColumn<double>("latitude");
0023         QTest::addColumn<double>("longitude");
0024         QTest::addColumn<QString>("name");
0025         QTest::addColumn<Line::Mode>("mode");
0026         QTest::addColumn<QColor>("color");
0027         QTest::addColumn<QString>("logo");
0028         QTest::addColumn<QString>("product");
0029 
0030         QTest::newRow("Berlin U1") << 52.52 << 13.40 << s("U1") << Line::Metro << QColor(0xff52b447) << s("Berlin%20transit%20icons%20-%20U1.svg") << s("U-Bahn.svg");
0031         QTest::newRow("Berlin S7") << 52.52 << 13.40 << s("S7") << Line::RapidTransit << QColor(0xff8070b7) << s("Berlin%20transit%20icons%20-%20S7.svg") << s("S-Bahn-Logo.svg");
0032         QTest::newRow("Berlin FEX") << 52.52 << 13.40 << s("FEX") << Line::LocalTrain << QColor() << s("FEX%20VBB%20(2021).png") << QString();
0033         QTest::newRow("Berlin RE1") << 52.52 << 13.40 << s("RE1") << Line::LocalTrain << QColor(0xffff0000) << s("RE1%20VBB%20(2021).png") << QString();
0034         QTest::newRow("Munich S1") << 48.13 << 11.58 << s("S1") << Line::RapidTransit << QColor(0xff36caec) << s("M%C3%BCnchen%20S1.svg") << s("S-Bahn-Logo.svg");
0035         QTest::newRow("Munich S3") << 48.13 << 11.58 << s("S3") << Line::RapidTransit << QColor(0xff862996) << s("M%C3%BCnchen%20S3.svg") << s("S-Bahn-Logo.svg");
0036         QTest::newRow("Munich U3") << 48.13 << 11.58 << s("U3") << Line::Metro << QColor(0xffe66432) << s("M%C3%BCnchen%20U3.svg") << s("U-Bahnlogo%20M%C3%BCnchen.svg");
0037         QTest::newRow("Nurnberg S2") << 49.44 << 11.08 << s("S2") << Line::RapidTransit << QColor(0xff65b949) << QString() << s("S-Bahn-Logo.svg");
0038         QTest::newRow("Nurnberg U2") << 49.44 << 11.08 << s("U2") << Line::Metro << QColor(0xffff0000) << s("N%C3%BCrnberg%20U2.svg") << s("U-Bahn.svg");
0039         QTest::newRow("Nurnberg tram 5") << 49.44 << 11.08 << s("5") << Line::Tramway << QColor() << s("N%C3%BCrnberg%20T5.png") << s("Tram%20N%C3%BCrnberg%20Logo.png");
0040         QTest::newRow("Frankfurt U8") << 50.1 << 8.66 << s("U8") << Line::Metro << QColor(0xffc77db5) << s("Frankfurt%20U8.svg") << s("U-Bahn.svg");
0041         QTest::newRow("Brussels 2") << 50.83 << 4.33 << s("2") << Line::Metro << QColor(0xffed6c23) << s("STIB-MIVB%20Line%202.svg") << s("Brussels%20Metro%20Logo.svg");
0042         QTest::newRow("Brussels 82") << 50.83 << 4.33 << s("82") << Line::Tramway << QColor(0xff91bee7) << s("STIB-MIVB%20Line%2082.svg") << s("Brussels%20tramway%20icon.svg");
0043         QTest::newRow("Brussels S6") << 50.83 << 4.33 << s("S6") << Line::RapidTransit << QColor(0xff965f26) << QString() << s("NMBS%20S-Trein%20logo.svg");
0044         QTest::newRow("Brussels S10") << 50.83 << 4.33 << s("S10") << Line::RapidTransit << QColor(0xff000000) << QString() << s("NMBS%20S-Trein%20logo.svg");
0045         QTest::newRow("Paris RER C") << 48.84 << 2.37 << s("C") << Line::RapidTransit << QColor(0xfffcd946) << s("Paris%20transit%20icons%20-%20RER%20C.svg") << s("Paris%20transit%20icons%20-%20RER.svg");
0046         QTest::newRow("Paris RER D") << 48.84 << 2.37 << s("D") << Line::RapidTransit << QColor(0xff5e9620) << s("Paris%20transit%20icons%20-%20RER%20D.svg") << s("Paris%20transit%20icons%20-%20RER.svg");
0047         QTest::newRow("Paris Metro 1") << 48.84 << 2.37 << s("1") << Line::Metro << QColor(0xffffcd00) << s("Paris%20transit%20icons%20-%20M%C3%A9tro%201.svg") << s("Paris%20transit%20icons%20-%20M%C3%A9tro.svg");
0048         QTest::newRow("Paris tram 1") << 48.84 << 2.37 << s("T1") << Line::Tramway << QColor(0xff216eb4) << s("Paris%20transit%20icons%20-%20Tram%201.svg") << s("Paris%20transit%20icons%20-%20Tram.svg");
0049         QTest::newRow("Milano M5") << 45.48 << 9.18 << s("M5") << Line::Metro << QColor(0xffb395d0) << s("Milano%20linea%20M5.svg") << s("Logo%20Metropolitane%20Italia.svg");
0050         QTest::newRow("Milano S1") << 45.48 << 9.18 << s("S1") << Line::RapidTransit << QColor(0xfffd0000) << s("Milano%20S1.svg") << s("Linee%20S%20di%20Milano.svg");
0051         QTest::newRow("Hannover S1") << 52.37 << 9.74 << s("S1") << Line::RapidTransit << QColor(0xff7760b0) << s("Hannover%20S1.svg") << s("S-Bahn-Logo.svg");
0052         QTest::newRow("Magdeburg S1") << 52.13 << 11.62 << s("S 1") << Line::RapidTransit << QColor(0xff408040) << QString() << s("S-Bahn-Logo.svg");
0053         QTest::newRow("Magdeburg 1") << 52.13 << 11.62 << s("1") << Line::Tramway << QColor(0xffb6005c) << s("Magdeburg%20Tram%201%20(2021).png") << QString();
0054         QTest::newRow("Vienna U1") << 48.18 << 16.37 << s("U1") << Line::Metro << QColor(0xffe20613) << s("Wien%20U1.svg") << s("U-Bahn%20Wien.svg");
0055         QTest::newRow("Vienna S1") << 48.18 << 16.37 << s("S1") << Line::RapidTransit << QColor(0xff159dd9) << s("S1%20Wien.svg") << s("S-Bahn%20Wien.svg");
0056         QTest::newRow("Hamburg U1") << 53.55 << 10.0 << s("U1") << Line::Metro << QColor(0xff0066b3) << s("Hamburg%20U1.svg") << s("U-Bahn.svg");
0057         QTest::newRow("Hamburg S1") << 53.55 << 10.0 << s("S1") << Line::RapidTransit << QColor(0xff33b540) << s("Hamburg%20S1.svg") << s("S-Bahn-Logo.svg");
0058         QTest::newRow("Copenhagen A") << 55.67 << 12.56 << s("A") << Line::RapidTransit << QColor(0xff00bfff) << s("S-train%20service%20A.svg") << s("S-tog.svg");
0059         QTest::newRow("Cologne S11") << 50.94 << 6.97 << s("S11") << Line::RapidTransit << QColor(0xffef7c00) << s("NRW%20S11.svg") << s("S-Bahn-Logo.svg");
0060         QTest::newRow("Stuttgart S1") << 48.78 << 9.18 << s("S1") << Line::RapidTransit << QColor(0xff5c8e3c) << s("S1%20S-Bahn%20Stuttgart%20Logo%20(2021).svg") << s("S-Bahn-Logo.svg");
0061         QTest::newRow("Stuttgart U6") << 48.78 << 9.18 << s("U6") << Line::RapidTransit << QColor(0xffec008c) << QString() << s("Logo%20Stadtbahn%20Stuttgart.svg");
0062         QTest::newRow("Barcelona L1") << 41.37 << 2.13 << s("L1") << Line::Metro << QColor(0xffe33638) << s("L1%20barcelona.svg") << s("Barcelona%20Metro%20Logo.svg");
0063         QTest::newRow("Toulouse Metro A") << 43.6 << 1.44 << s("A") << Line::Metro << QColor(0xffdb001b) << s("Toulouse%20line%20A%20symbol.svg") << s("Toulouse%20%22M%22%20symbol.svg");
0064         QTest::newRow("San Francisco BART Yellow") << 37.77 << -122.41 << s("Yellow") << Line::Metro << QColor(0xffffe800) << QString() << s("Bart-logo.svg");
0065         QTest::newRow("Augsburg tram 3") << 48.33 << 10.89 << s("3") << Line::Tramway << QColor(0xffef7c00) << s("Augsburg%20Tram%203.svg") << QString();
0066         QTest::newRow("Oslo T-Bane 4") << 59.94 << 10.76 << s("4") << Line::Metro << QColor(0xff0054a6) << s("Oslo%20Metro%204.svg") << s("Oslo%20T-bane%20Logo.svg");
0067         QTest::newRow("Oslo tram 12") << 59.94 << 10.76 << s("12") << Line::Tramway << QColor(0xffa166aa) << s("Oslo%20Tramway%20new%2012.svg") << QString();
0068         QTest::newRow("Prague C") << 50.07 << 14.47 << s("C") << Line::Metro << QColor(0xffcf003d) << s("Linka%20C%20(Praha).svg") << s("Prag%20Metro%20Logo.svg");
0069         QTest::newRow("Bonn tram 61") << 50.73 << 7.1 << s("61") << Line::Tramway << QColor(0xff98c000) << QString() << s("Stadtbahn.svg");
0070         QTest::newRow("Rome Metro A") << 41.8989 << 12.5089 << s("A") << Line::Metro << QColor(0xfff68b1f) << s("Metropolitana%20di%20Roma%20-%20logo%20linea%20A.svg") << s("Logo%20Metropolitane%20Italia.svg");
0071         QTest::newRow("Gotenburg tram 6") << 57.7 << 11.96 << s("6") << Line::Tramway << QColor(0xfffa8719) << s("Sp%C3%A5rvagnslinje%206.svg") << QString();
0072         QTest::newRow("Amsterdam line 54") << 52.37 << 4.9 << s("54") << Line::Metro << QColor(0xfffcfb05) << s("Amsterdam%20unofficial%20metro%20icon%20line%2054.svg") << s("Amsterdam%20metro%20logo.svg");
0073         QTest::newRow("Thessaloniki metro 2") << 40.64 << 22.93 << s("2") << Line::Metro << QColor(0xff0070ff) << s("Thessaloniki%20Metro%20Line%202.svg") << QString();
0074         QTest::newRow("Graz S5") <<  47.1 << 15.4 << s("S5") << Line::RapidTransit << QColor(0xff8d1d81) << s("S5%20Steiermark.svg") << s("S-Bahn%20Austria.svg");
0075         QTest::newRow("Zurich IC 1") << 47.37 << 8.54 << s("IC 1") << Line::LongDistanceTrain << QColor(0xffe43d2e) << s("IC%201%20logo.svg") << QString();
0076     }
0077 
0078     void testLookup()
0079     {
0080         QFETCH(double, latitude);
0081         QFETCH(double, longitude);
0082         QFETCH(QString, name);
0083         QFETCH(Line::Mode, mode);
0084         QFETCH(QColor, color);
0085         QFETCH(QString, logo);
0086         QFETCH(QString, product);
0087 
0088         const auto l = LineMetaData::find(latitude, longitude, name, mode);
0089         QVERIFY(!l.isNull());
0090 
0091         QCOMPARE(l.name(), name);
0092         QCOMPARE(l.mode(), mode);
0093         QCOMPARE(l.color(), color);
0094 
0095         if (logo.isEmpty()) {
0096             QCOMPARE(l.logoUrl(), QUrl());
0097         } else {
0098             QCOMPARE(l.logoUrl().toString(QUrl::FullyEncoded), QString(QLatin1String("https://commons.wikimedia.org/wiki/Special:Redirect/file/") + logo));
0099         }
0100 
0101         if (product.isEmpty()) {
0102             QCOMPARE(l.modeLogoUrl(), QUrl());
0103         } else {
0104             QCOMPARE(l.modeLogoUrl().toString(QUrl::FullyEncoded), QString(QLatin1String("https://commons.wikimedia.org/wiki/Special:Redirect/file/") + product));
0105         }
0106     }
0107 
0108     void testLookupSpecial()
0109     {
0110         const auto l = LineMetaData::find(52.52, 13.40,  QStringLiteral("S 7"), Line::Train);
0111         QVERIFY(!l.isNull());
0112         QCOMPARE(l.name(), QLatin1String("S7"));
0113         QCOMPARE(l.mode(), Line::RapidTransit);
0114     }
0115 
0116     void testNegativeLookup()
0117     {
0118         auto l = LineMetaData::find(0.0f, -89.0, QStringLiteral("U1"), Line::Metro);
0119         QVERIFY(l.isNull());
0120 
0121         l = LineMetaData::find(52.52f, 13.40f, QStringLiteral("U11"), Line::Metro);
0122         QVERIFY(l.isNull());
0123 
0124         l = LineMetaData::find(52.52, 13.40, QStringLiteral("U1"), Line::Tramway);
0125         QVERIFY(l.isNull());
0126     }
0127 };
0128 
0129 QTEST_GUILESS_MAIN(LineMetaDataTest)
0130 
0131 #include "linemetadatatest.moc"