File indexing completed on 2024-05-05 05:55:36

0001 /*
0002     This file is part of the Okteta Core library, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "piecetablechangehistorytest.hpp"
0010 
0011 // test object
0012 #include <piecetable/piecetablechangehistory.hpp>
0013 // test
0014 #include "testpiecetablechange.hpp"
0015 #include <piecetable/piecetable.hpp>
0016 //
0017 #include <arraychangemetricslist.hpp>
0018 #include <addressrangelist.hpp>
0019 // Qt
0020 #include <QTest>
0021 
0022 namespace KPieceTable {
0023 
0024 void PieceTableChangeHistoryTest::testSimpleConstructor()
0025 {
0026     PieceTableChangeHistory pieceTableChangeHistory;
0027 
0028     QCOMPARE(pieceTableChangeHistory.count(), 0);
0029     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 0);
0030 }
0031 
0032 void PieceTableChangeHistoryTest::testAppendChange()
0033 {
0034     PieceTableChangeHistory pieceTableChangeHistory;
0035 
0036     const int type1Id = 1;
0037     const int type2Id = 2;
0038     const int type3Id = type2Id;
0039     const int type4Id = 4;
0040     const QString description1 = QStringLiteral("1");
0041     const QString description2 = QStringLiteral("2");
0042     const QString description3 = QStringLiteral("3");
0043     const QString description4 = QStringLiteral("4");
0044     auto* change1 = new TestPieceTableChange(type1Id, description1);
0045     auto* change2 = new TestPieceTableChange(type2Id, description2);
0046     auto* change3 = new TestPieceTableChange(type3Id, description3);
0047     auto* change4 = new TestPieceTableChange(type4Id, description4);
0048 
0049     // adding first
0050     bool result = pieceTableChangeHistory.appendChange(change1);
0051 
0052     QVERIFY(result);
0053     QCOMPARE(pieceTableChangeHistory.count(), 1);
0054     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 1);
0055     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description1);
0056     QCOMPARE(pieceTableChangeHistory.changeDescription(0), description1);
0057 
0058     // adding first
0059     result = pieceTableChangeHistory.appendChange(change2);
0060 
0061     QVERIFY(result);
0062     QCOMPARE(pieceTableChangeHistory.count(), 2);
0063     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 2);
0064     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description2);
0065     QCOMPARE(pieceTableChangeHistory.changeDescription(0), description1);
0066     QCOMPARE(pieceTableChangeHistory.changeDescription(1), description2);
0067 
0068     // adding third which should be merged
0069     result = pieceTableChangeHistory.appendChange(change3);
0070 
0071     QVERIFY(!result);
0072     QCOMPARE(pieceTableChangeHistory.count(), 2);
0073     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 2);
0074     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), QString(description2 + description3));
0075     QCOMPARE(pieceTableChangeHistory.changeDescription(0), description1);
0076     QCOMPARE(pieceTableChangeHistory.changeDescription(1), QString(description2 + description3));
0077 
0078     // adding third which should not be merged as we call finishChange before
0079     pieceTableChangeHistory.finishChange();
0080     result = pieceTableChangeHistory.appendChange(change4);
0081 
0082     QVERIFY(result);
0083     QCOMPARE(pieceTableChangeHistory.count(), 3);
0084     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 3);
0085     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description4);
0086     QCOMPARE(pieceTableChangeHistory.changeDescription(0), description1);
0087     QCOMPARE(pieceTableChangeHistory.changeDescription(1), QString(description2 + description3));
0088     QCOMPARE(pieceTableChangeHistory.changeDescription(2), description4);
0089 }
0090 
0091 void PieceTableChangeHistoryTest::testRevertBeforeChange()
0092 {
0093     PieceTableChangeHistory pieceTableChangeHistory;
0094     PieceTable pieceTable;
0095     pieceTable.init(0);
0096 
0097     const int type1Id = 1;
0098     const int type2Id = 2;
0099     const int type3Id = 3;
0100     const int type4Id = 4;
0101     const QString description1 = QStringLiteral("1");
0102     const QString description2 = QStringLiteral("2");
0103     const QString description3 = QStringLiteral("3");
0104     const QString description4 = QStringLiteral("4");
0105     auto* change1 = new TestPieceTableChange(type1Id, description1, 1);
0106     auto* change2 = new TestPieceTableChange(type2Id, description2, 2);
0107     auto* change3 = new TestPieceTableChange(type3Id, description3, 3);
0108     auto* change4 = new TestPieceTableChange(type4Id, description4, 4);
0109     ArrayChangeMetrics changeMetrics1 = change1->metrics();
0110     ArrayChangeMetrics changeMetrics2 = change2->metrics();
0111     ArrayChangeMetrics changeMetrics3 = change3->metrics();
0112     ArrayChangeMetrics changeMetrics4 = change4->metrics();
0113     ArrayChangeMetrics revertedChangeMetrics1 = change1->metrics(); revertedChangeMetrics1.revert();
0114     ArrayChangeMetrics revertedChangeMetrics2 = change2->metrics(); revertedChangeMetrics2.revert();
0115     ArrayChangeMetrics revertedChangeMetrics3 = change3->metrics(); revertedChangeMetrics3.revert();
0116     ArrayChangeMetrics revertedChangeMetrics4 = change4->metrics(); revertedChangeMetrics4.revert();
0117 
0118     bool result = pieceTableChangeHistory.appendChange(change1);
0119     result = pieceTableChangeHistory.appendChange(change2);
0120     result = pieceTableChangeHistory.appendChange(change3);
0121     result = pieceTableChangeHistory.appendChange(change4);
0122 
0123     // revert before first change
0124     AddressRangeList changedSectionList;
0125     ArrayChangeMetricsList changeList;
0126     result =
0127         pieceTableChangeHistory.revertBeforeChange(&pieceTable, 0, &changedSectionList, &changeList);
0128 
0129     QVERIFY(result);
0130     QCOMPARE(pieceTableChangeHistory.count(), 4);
0131     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 0);
0132     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description4);
0133     QCOMPARE(changedSectionList.size(), 1);
0134     QCOMPARE(changedSectionList.first(), AddressRange(1, 4));
0135     QCOMPARE(changeList.size(), 4);
0136     QCOMPARE(changeList[0], revertedChangeMetrics4);
0137     QCOMPARE(changeList[1], revertedChangeMetrics3);
0138     QCOMPARE(changeList[2], revertedChangeMetrics2);
0139     QCOMPARE(changeList[3], revertedChangeMetrics1);
0140 
0141     // revert before last change
0142     changedSectionList.clear();
0143     changeList.clear();
0144     result =
0145         pieceTableChangeHistory.revertBeforeChange(&pieceTable, 3, &changedSectionList, &changeList);
0146 
0147     QVERIFY(result);
0148     QCOMPARE(pieceTableChangeHistory.count(), 4);
0149     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 3);
0150     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description4);
0151     QCOMPARE(changedSectionList.size(), 1);
0152     QCOMPARE(changedSectionList.first(), AddressRange(1, 3));
0153     QCOMPARE(changeList.size(), 3);
0154     QCOMPARE(changeList[0], changeMetrics1);
0155     QCOMPARE(changeList[1], changeMetrics2);
0156     QCOMPARE(changeList[2], changeMetrics3);
0157 
0158     // revert after first change
0159     changedSectionList.clear();
0160     changeList.clear();
0161     result =
0162         pieceTableChangeHistory.revertBeforeChange(&pieceTable, 1, &changedSectionList, &changeList);
0163 
0164     QVERIFY(result);
0165     QCOMPARE(pieceTableChangeHistory.count(), 4);
0166     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 1);
0167     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description4);
0168     QCOMPARE(changedSectionList.size(), 1);
0169     QCOMPARE(changedSectionList.first(), AddressRange(2, 3));
0170     QCOMPARE(changeList.size(), 2);
0171     QCOMPARE(changeList[0], revertedChangeMetrics3);
0172     QCOMPARE(changeList[1], revertedChangeMetrics2);
0173 
0174     // revert after last change
0175     changedSectionList.clear();
0176     changeList.clear();
0177     result =
0178         pieceTableChangeHistory.revertBeforeChange(&pieceTable, 4, &changedSectionList, &changeList);
0179 
0180     QVERIFY(result);
0181     QCOMPARE(pieceTableChangeHistory.count(), 4);
0182     QCOMPARE(pieceTableChangeHistory.appliedChangesCount(), 4);
0183     QCOMPARE(pieceTableChangeHistory.headChangeDescription(), description4);
0184     QCOMPARE(changedSectionList.size(), 1);
0185     QCOMPARE(changedSectionList.first(), AddressRange(2, 4));
0186     QCOMPARE(changeList.size(), 3);
0187     QCOMPARE(changeList[0], changeMetrics2);
0188     QCOMPARE(changeList[1], changeMetrics3);
0189     QCOMPARE(changeList[2], changeMetrics4);
0190 }
0191 
0192 }
0193 
0194 QTEST_GUILESS_MAIN(KPieceTable::PieceTableChangeHistoryTest)
0195 
0196 #include "moc_piecetablechangehistorytest.cpp"