File indexing completed on 2024-03-24 04:43:45
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <KPublicTransport/Location> 0008 0009 #include <QTest> 0010 0011 #include <cmath> 0012 0013 #define s(x) QStringLiteral(x) 0014 0015 using namespace KPublicTransport; 0016 0017 class LocationTest : public QObject 0018 { 0019 Q_OBJECT 0020 private Q_SLOTS: 0021 void testLocationNameCompare_data() 0022 { 0023 QTest::addColumn<QString>("lhs"); 0024 QTest::addColumn<QString>("rhs"); 0025 0026 QTest::newRow("identical") << s("Berlin Hbf") << s("Berlin Hbf"); 0027 0028 QTest::newRow("case folding") << s("Berlin Hbf") << s("Berlin HBF"); 0029 0030 QTest::newRow("separators1") << s("Berlin Hauptbahnhof") << s("Berlin, Hauptbahnhof"); 0031 QTest::newRow("separators2") << s("Berlin Hauptbahnhof") << s("Berlin (Hauptbahnhof)"); 0032 QTest::newRow("separators3") << s("Berlin, Hauptbahnhof") << s("Berlin (Hauptbahnhof)"); 0033 QTest::newRow("separators4") << s("Paris-Gare-de-Lyon") << s("Paris Gare de Lyon"); 0034 0035 QTest::newRow("abbreviations1") << s("Berlin Hbf") << s("Berlin Hauptbahnhof"); 0036 QTest::newRow("abbreviations2") << s("Amsterdam Cs") << s("Amsterdam Centraal"); 0037 QTest::newRow("abbreviations3") << s("Berlin Friedrich Straße") << s("Berlin Friedrich Str."); 0038 0039 QTest::newRow("inline abbreviation1") << s("Berlin Friedrichstr.") << s("Berlin Friedrichstrasse"); 0040 0041 QTest::newRow("extras1") << s("S+U Berlin Hbf") << s("Berlin Hauptbahnhof"); 0042 QTest::newRow("extras2") << s("Berlin Schönefeld Flughafen (S)") << s("S Berlin Schönefeld Flughafen"); 0043 QTest::newRow("extras3") << s("Paris Gare de Lyon RER") << s("Paris Gare de Lyon"); 0044 QTest::newRow("extras4") << s("Paris-Gare-de-Lyon RER (Paris)") << s("Gare de Lyon RER A (Paris)"); 0045 0046 QTest::newRow("station1") << s("Boissy-St-Léger") << s("Gare de Boissy-St-Léger"); 0047 QTest::newRow("station2") << s("Flughafen Wien") << s("Flughafen Wien Bahnhof"); 0048 QTest::newRow("station3") << s("Berlin Schönefeld Flughafen Bhf") << s("Berlin Schönefeld Flughafen"); 0049 0050 QTest::newRow("duplicates1") << s("Paris Gare de Lyon (Paris)") << s("Paris Gare de Lyon"); 0051 QTest::newRow("duplicates2") << s("Gare de Saint-Rémy les Chevreuse (Saint-Rémy-lès-Chevreuse)") << s("St-Rémy-lès-Chevreuse (Saint-Rémy-lès-Chevreuse)"); 0052 0053 QTest::newRow("normalization1") << s("Boissy-St-Léger (Boissy-Saint-Léger)") << s("Boissy St Léger"); 0054 0055 QTest::newRow("order1") << s("Paris Gare de Lyon") << s("Gare de Lyon (Paris)"); 0056 0057 QTest::newRow("localization1") << s("Berlin Flughafen Schönefeld (Airport)") << s("Berlin Flughafen Schönefeld Bhf"); 0058 0059 QTest::newRow("diacritic1") << s("Berlin Flughafen Schonefeld") << s("Berlin Flughafen Schönefeld"); 0060 QTest::newRow("diacritic2") << s("Berlin Flughafen Schoenefeld") << s("Berlin Flughafen Schönefeld"); 0061 QTest::newRow("diacritic3") << s("København H") << s("Koebenhavn H"); 0062 0063 QTest::newRow("prefix1") << s("Zürich Flughafen") << s("Zürich Flughafen (Kloten)"); 0064 0065 QTest::newRow("unicode1") << s("Berlin Friedrichstraße") << s("Berlin Friedrichstrasse"); 0066 } 0067 0068 void testLocationNameCompare() 0069 { 0070 QFETCH(QString, lhs); 0071 QFETCH(QString, rhs); 0072 Location l, r; 0073 l.setName(lhs); 0074 r.setName(rhs); 0075 0076 QEXPECT_FAIL("inline abbreviation1", "not implemented yet", Abort); 0077 QVERIFY(Location::isSame(l, r)); 0078 QVERIFY(Location::isSame(r, l)); 0079 } 0080 0081 void testLocationNameMerge_data() 0082 { 0083 QTest::addColumn<QString>("lhs"); 0084 QTest::addColumn<QString>("rhs"); 0085 QTest::addColumn<QString>("result"); 0086 0087 QTest::newRow("identical") << s("Berlin Hbf") << s("Berlin Hbf") << s("Berlin Hbf"); 0088 QTest::newRow("abbreviation") << s("Berlin Hbf") << s("Berlin Hauptbahnhof") << s("Berlin Hauptbahnhof"); 0089 QTest::newRow("separators") << s("Châtelet les Halles (Paris)") << s("Châtelet-les-Halles (Paris)") << s("Châtelet les Halles (Paris)"); 0090 0091 // TODO stuff that doesn't work as good as it could be yet 0092 //QTest::newRow("all caps") << s("BERLIN") << s("Berlin") << s("Berlin"); 0093 //QTest::newRow("unicode") << s("København H") << s("Koebenhavn H") << s("København H"); 0094 //QTest::newRow("redundancy") << s("Bern (Bern)") << s("Bern") << s("Bern"); 0095 } 0096 0097 void testLocationNameMerge() 0098 { 0099 QFETCH(QString, lhs); 0100 QFETCH(QString, rhs); 0101 QFETCH(QString, result); 0102 0103 Location l, r; 0104 l.setName(lhs); 0105 r.setName(rhs); 0106 0107 QCOMPARE(Location::merge(l, r).name(), result); 0108 QCOMPARE(Location::merge(r, l).name(), result); 0109 } 0110 0111 void testCoordinates() 0112 { 0113 Location l, r; 0114 l.setName(QStringLiteral("Berlin")); 0115 r.setName(QStringLiteral("Berlin")); 0116 0117 l.setCoordinate(52.555, 13.555); 0118 QVERIFY(Location::isSame(l, r)); 0119 QVERIFY(Location::isSame(r, l)); 0120 0121 r.setCoordinate(52.557, 13.557); 0122 QVERIFY(Location::isSame(l, r)); 0123 QVERIFY(Location::isSame(r, l)); 0124 0125 QVERIFY(std::abs(Location::merge(l, r).latitude() - 52.556) < 0.001); 0126 QVERIFY(std::abs(Location::merge(r, l).latitude() - 52.556) < 0.001); 0127 QVERIFY(std::abs(Location::merge(l, r).longitude() - 13.556) < 0.001); 0128 QVERIFY(std::abs(Location::merge(r, l).longitude() - 13.556) < 0.001); 0129 0130 r.setCoordinate(-52.5, 135.5); 0131 QVERIFY(!Location::isSame(l, r)); 0132 QVERIFY(!Location::isSame(r, l)); 0133 } 0134 0135 void testLocationIdentifierCompare() 0136 { 0137 Location l, r; 0138 l.setIdentifier(QStringLiteral("ibnr"), QStringLiteral("8012345")); 0139 r.setIdentifier(QStringLiteral("ibnr"), QStringLiteral("8054321")); 0140 QVERIFY(!Location::isSame(l, r)); 0141 QVERIFY(!Location::isSame(r, l)); 0142 QVERIFY(Location::isSame(l, l)); 0143 0144 l.setIdentifier(QStringLiteral("db"), QStringLiteral("12345")); 0145 r.setIdentifier(QStringLiteral("db"), QStringLiteral("12345")); 0146 QVERIFY(!Location::isSame(l, r)); 0147 QVERIFY(!Location::isSame(r, l)); 0148 QVERIFY(Location::isSame(l, l)); 0149 0150 l.setIdentifier(QStringLiteral("sncf"), QStringLiteral("FRABC")); 0151 QVERIFY(!Location::isSame(l, r)); 0152 QVERIFY(!Location::isSame(r, l)); 0153 QVERIFY(Location::isSame(l, l)); 0154 0155 Location l2, r2; 0156 l2.setName(QStringLiteral("Brussels Gare de Midi")); 0157 l2.setName(QStringLiteral("Brussels Gare de Midi")); 0158 l2.setIdentifier(QStringLiteral("vendor1"), QStringLiteral("12345")); 0159 r2.setIdentifier(QStringLiteral("vendor2"), QStringLiteral("54321")); 0160 QVERIFY(Location::isSame(l2, r2)); 0161 QVERIFY(Location::isSame(r2, l2)); 0162 } 0163 }; 0164 0165 QTEST_GUILESS_MAIN(LocationTest) 0166 0167 #include "locationtest.moc"