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"