File indexing completed on 2024-04-14 05:37:15
0001 /* 0002 SPDX-FileCopyrightText: 2011 Dmitry Risenberg <dmitry.risenberg@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "levenshteintest.h" 0008 0009 // lib 0010 #include "difference.h" 0011 #include "differencestringpair.h" 0012 #include "levenshteintable.h" 0013 #include "stringlistpair.h" 0014 // Qt 0015 #include <QTest> 0016 0017 using namespace KompareDiff2; 0018 0019 namespace QTest 0020 { 0021 0022 template<> 0023 char *toString(const Marker &marker) 0024 { 0025 QByteArray result = "Marker("; 0026 if (marker.type() == Marker::Start) { 0027 result += "Start, "; 0028 } else { 0029 result += "End, "; 0030 } 0031 result += QByteArray::number(marker.offset()); 0032 result += ")"; 0033 return qstrdup(result.data()); 0034 } 0035 0036 } 0037 0038 void LevenshteinTest::testFirstEmptyString() 0039 { 0040 DifferenceString *string1 = new DifferenceString(QString("12345")); 0041 DifferenceString *string2 = new DifferenceString(QString()); 0042 DifferenceStringPair *pair = new DifferenceStringPair(string1, string2); 0043 LevenshteinTable<DifferenceStringPair> table; 0044 table.createTable(pair); 0045 table.createListsOfMarkers(); 0046 MarkerList markersFirstExpected; 0047 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 5); 0048 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0049 QCOMPARE(*string1->markerList()[i], *markersFirstExpected[i]); 0050 } 0051 MarkerList markersSecondExpected; 0052 markersSecondExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 0); 0053 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0054 QCOMPARE(*string2->markerList()[i], *markersSecondExpected[i]); 0055 } 0056 } 0057 0058 void LevenshteinTest::testSecondEmptyString() 0059 { 0060 DifferenceString *string1 = new DifferenceString(QString()); 0061 DifferenceString *string2 = new DifferenceString(QString("12345")); 0062 DifferenceStringPair *pair = new DifferenceStringPair(string1, string2); 0063 LevenshteinTable<DifferenceStringPair> table; 0064 table.createTable(pair); 0065 table.createListsOfMarkers(); 0066 MarkerList markersFirstExpected; 0067 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 0); 0068 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0069 QCOMPARE(*string1->markerList()[i], *markersFirstExpected[i]); 0070 } 0071 MarkerList markersSecondExpected; 0072 markersSecondExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 5); 0073 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0074 QCOMPARE(*string2->markerList()[i], *markersSecondExpected[i]); 0075 } 0076 } 0077 0078 void LevenshteinTest::testDifferenceStrings() 0079 { 0080 DifferenceString *string1 = new DifferenceString(QString("aaabcddefghik")); 0081 DifferenceString *string2 = new DifferenceString(QString("aabcefghijk")); 0082 DifferenceStringPair *pair = new DifferenceStringPair(string1, string2); 0083 LevenshteinTable<DifferenceStringPair> table; 0084 table.createTable(pair); 0085 table.createListsOfMarkers(); 0086 MarkerList markersFirstExpected; 0087 markersFirstExpected << new Marker(Marker::Start, 2) << new Marker(Marker::End, 3) << new Marker(Marker::Start, 5) << new Marker(Marker::End, 7); 0088 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0089 QCOMPARE(*string1->markerList()[i], *markersFirstExpected[i]); 0090 } 0091 MarkerList markersSecondExpected; 0092 markersSecondExpected << new Marker(Marker::Start, 9) << new Marker(Marker::End, 10); 0093 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0094 QCOMPARE(*string2->markerList()[i], *markersSecondExpected[i]); 0095 } 0096 } 0097 0098 void LevenshteinTest::testStringLists() 0099 { 0100 QStringList list1; 0101 list1 << "delete1" 0102 << "line1" 0103 << "line2" 0104 << "line3" 0105 << "delete2" 0106 << "delete3" 0107 << "line4"; 0108 QStringList list2; 0109 list2 << "line1" 0110 << "line2" 0111 << "line3" 0112 << "insert1" 0113 << "line4" 0114 << "insert2"; 0115 StringListPair *pair = new StringListPair(list1, list2); 0116 LevenshteinTable<StringListPair> table; 0117 table.createTable(pair); 0118 table.createListsOfMarkers(); 0119 0120 MarkerList markersFirstExpected; 0121 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 1) << new Marker(Marker::Start, 4) << new Marker(Marker::End, 6); 0122 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0123 QCOMPARE(*pair->markerListFirst()[i], *markersFirstExpected[i]); 0124 } 0125 MarkerList markersSecondExpected; 0126 markersSecondExpected << new Marker(Marker::Start, 3) << new Marker(Marker::End, 4) << new Marker(Marker::Start, 5) << new Marker(Marker::End, 6); 0127 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0128 QCOMPARE(*pair->markerListSecond()[i], *markersSecondExpected[i]); 0129 } 0130 } 0131 0132 void LevenshteinTest::testSmth() 0133 { 0134 QStringList list1; 0135 list1 << "insert1\n" 0136 << "newline1\n" 0137 << "newline2\n" 0138 << "insert2\n"; 0139 ; 0140 QStringList list2; 0141 list2 << "delete1\n" 0142 << "efgh\n" 0143 << "delete2\n"; 0144 StringListPair *pair = new StringListPair(list1, list2); 0145 LevenshteinTable<StringListPair> table; 0146 table.createTable(pair); 0147 table.createListsOfMarkers(); 0148 0149 MarkerList markersFirstExpected; 0150 markersFirstExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 4); 0151 for (int i = 0; i < markersFirstExpected.size(); ++i) { 0152 QCOMPARE(*pair->markerListFirst()[i], *markersFirstExpected[i]); 0153 } 0154 MarkerList markersSecondExpected; 0155 markersSecondExpected << new Marker(Marker::Start, 0) << new Marker(Marker::End, 3); 0156 for (int i = 0; i < markersSecondExpected.size(); ++i) { 0157 QCOMPARE(*pair->markerListSecond()[i], *markersSecondExpected[i]); 0158 } 0159 } 0160 0161 QTEST_GUILESS_MAIN(LevenshteinTest); 0162 0163 #include "moc_levenshteintest.cpp"