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

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/Line>
0008 
0009 #include <QTest>
0010 
0011 #define s(x) QStringLiteral(x)
0012 
0013 using namespace KPublicTransport;
0014 
0015 class LineTest : public QObject
0016 {
0017     Q_OBJECT
0018 private Q_SLOTS:
0019     void testLineCompare_data()
0020     {
0021         QTest::addColumn<QString>("lhsModeName");
0022         QTest::addColumn<QString>("lhsName");
0023         QTest::addColumn<QString>("rhsModeName");
0024         QTest::addColumn<QString>("rhsName");
0025 
0026         QTest::newRow("identical") << s("S") << s("7") << s("S") << s("7");
0027         QTest::newRow("mode empty") << QString() << s("S7") << QString() << s("S7");
0028         QTest::newRow("mode only") << s("R") << QString() << s("R") << QString();
0029 
0030         QTest::newRow("space") << QString() << s("S7") << QString() << s("S 7");
0031         QTest::newRow("mode vs name") << s("RER") << s("A") << QString() << s("RER A");
0032         QTest::newRow("case folding") << s("RER") << s("A") << s("Rer") << s("A");
0033 
0034         QTest::newRow("missing mode") << s("Train") << s("A") << QString() << s("A");
0035         QTest::newRow("line vs train") << QString() << s("S7") << QString() << s("S 7 (Train no.123465)");
0036 
0037         QTest::newRow("prefix") << s("R") << s("123") << s("R") << QString();
0038         QTest::newRow("suffix") << QString() << s("Bus X7") << QString() << s("X7");
0039 
0040         QTest::newRow("unicode") << QString() << s("〇") << QString() << s("〇");
0041 
0042         QTest::newRow("special char") << QString() << s("<6>") << QString() << s("<6>");
0043 
0044         QTest::newRow("TGV INOUI") << QString() << s("TGV INOUI 8501") << QString() << s("TGV 8501");
0045     }
0046 
0047     void testLineCompare()
0048     {
0049         QFETCH(QString, lhsModeName);
0050         QFETCH(QString, lhsName);
0051         QFETCH(QString, rhsModeName);
0052         QFETCH(QString, rhsName);
0053 
0054         Line l, r;
0055         l.setModeString(lhsModeName);
0056         l.setName(lhsName);
0057         r.setModeString(rhsModeName);
0058         r.setName(rhsName);
0059         QVERIFY(Line::isSame(l, r));
0060         QVERIFY(Line::isSame(r, l));
0061     }
0062 
0063     void testLineCompareNegative_data()
0064     {
0065         QTest::addColumn<QString>("lhsModeName");
0066         QTest::addColumn<QString>("lhsName");
0067         QTest::addColumn<QString>("rhsModeName");
0068         QTest::addColumn<QString>("rhsName");
0069 
0070         QTest::newRow("mismatch") << s("S") << s("7") << s("S") << s("5");
0071         QTest::newRow("non-separated prefix") << QString() << s("S7") << QString() << s("S75");
0072         QTest::newRow("non-separated suffix") << QString() << s("7") << QString() << s("S47");
0073     }
0074 
0075     void testLineCompareNegative()
0076     {
0077         QFETCH(QString, lhsModeName);
0078         QFETCH(QString, lhsName);
0079         QFETCH(QString, rhsModeName);
0080         QFETCH(QString, rhsName);
0081 
0082         Line l, r;
0083         l.setModeString(lhsModeName);
0084         l.setName(lhsName);
0085         r.setModeString(rhsModeName);
0086         r.setName(rhsName);
0087         QVERIFY(!Line::isSame(l, r));
0088         QVERIFY(!Line::isSame(r, l));
0089     }
0090 
0091     void testLineNameMerge_data()
0092     {
0093         QTest::addColumn<QString>("lhsModeName");
0094         QTest::addColumn<QString>("lhsName");
0095         QTest::addColumn<QString>("rhsModeName");
0096         QTest::addColumn<QString>("rhsName");
0097         QTest::addColumn<QString>("resModeName");
0098         QTest::addColumn<QString>("resName");
0099 
0100         QTest::newRow("identical") << s("S") << s("7") << s("S") << s("7") << s("S") << s("7");
0101         QTest::newRow("space") << QString() << s("S7") << QString() << s("S 7") << QString() << s("S 7");
0102         QTest::newRow("line vs vehicle") << QString() << s("RB 14") << QString() << s("RB 12345") << QString() << s("RB 12345");
0103 
0104         QTest::newRow("mode vs name") << s("Bus") << s("X7") << QString() << s("Bus X7") << s("Bus") << s("X7");
0105     }
0106 
0107     void testLineNameMerge()
0108     {
0109         QFETCH(QString, lhsModeName);
0110         QFETCH(QString, lhsName);
0111         QFETCH(QString, rhsModeName);
0112         QFETCH(QString, rhsName);
0113         QFETCH(QString, resModeName);
0114         QFETCH(QString, resName);
0115 
0116         Line l, r;
0117         l.setModeString(lhsModeName);
0118         l.setName(lhsName);
0119         r.setModeString(rhsModeName);
0120         r.setName(rhsName);
0121 
0122         const auto mergeL2R = Line::merge(l, r);
0123         QCOMPARE(mergeL2R.modeString(), resModeName);
0124         QCOMPARE(mergeL2R.name(), resName);
0125 
0126         const auto mergeR2L = Line::merge(r, l);
0127         QCOMPARE(mergeR2L.modeString(), resModeName);
0128         QCOMPARE(mergeR2L.name(), resName);
0129     }
0130 
0131     void testLineModeMerge_data()
0132     {
0133         QTest::addColumn<Line::Mode>("lhsMode");
0134         QTest::addColumn<Line::Mode>("rhsMode");
0135         QTest::addColumn<Line::Mode>("mergedMode");
0136 
0137         QTest::newRow("identical") << Line::Train << Line::Train << Line::Train;
0138         QTest::newRow("local train") << Line::LocalTrain << Line::Train << Line::LocalTrain;
0139         QTest::newRow("long distance train") << Line::LongDistanceTrain << Line::Train << Line::LongDistanceTrain;
0140         QTest::newRow("one unknown") << Line::Unknown << Line::Train << Line::Train;
0141     }
0142 
0143     void testLineModeMerge()
0144     {
0145         QFETCH(Line::Mode, lhsMode);
0146         QFETCH(Line::Mode, rhsMode);
0147         QFETCH(Line::Mode, mergedMode);
0148 
0149         Line l, r;
0150         l.setMode(lhsMode);
0151         r.setMode(rhsMode);
0152 
0153         QVERIFY(Line::isSame(l, r));
0154         QVERIFY(Line::isSame(r, l));
0155         QCOMPARE(Line::merge(l, r).mode(), mergedMode);
0156         QCOMPARE(Line::merge(r, l).mode(), mergedMode);
0157     }
0158 };
0159 
0160 QTEST_GUILESS_MAIN(LineTest)
0161 
0162 #include "linetest.moc"