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"