File indexing completed on 2024-04-28 15:59:43
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"