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 "grouppiecetablechangetest.hpp" 0010 0011 // test object 0012 #include <piecetable/grouppiecetablechange.hpp> 0013 // test 0014 #include "testpiecetablechange.hpp" 0015 #include <piecetable/piecetable.hpp> 0016 // 0017 #include <arraychangemetricslist.hpp> 0018 // Qt 0019 #include <QTest> 0020 0021 namespace KPieceTable { 0022 0023 // local variables 0024 // TODO QStringLiteral 0025 static constexpr char Description[] = "description"; 0026 0027 void GroupPieceTableChangeTest::testConstructor() 0028 { 0029 GroupPieceTableChange groupPieceTableChange(nullptr, QLatin1String(Description)); 0030 0031 // QCOMPARE( groupPieceTableChange.count(), 0 ); 0032 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 0); 0033 QCOMPARE(groupPieceTableChange.parent(), (GroupPieceTableChange*)nullptr); 0034 QCOMPARE(groupPieceTableChange.dataSize(), 0); 0035 QCOMPARE(groupPieceTableChange.description(), QLatin1String(Description)); 0036 } 0037 0038 void GroupPieceTableChangeTest::testAppendChange() 0039 { 0040 GroupPieceTableChange groupPieceTableChange(nullptr, QLatin1String(Description)); 0041 0042 const int type1Id = 1; 0043 const int type2Id = 2; 0044 const int type3Id = type2Id; 0045 const int type4Id = 4; 0046 const QString description1 = QStringLiteral("1"); 0047 const QString description2 = QStringLiteral("2"); 0048 const QString description3 = QStringLiteral("3"); 0049 const QString description4 = QStringLiteral("4"); 0050 auto* change1 = new TestPieceTableChange(type1Id, description1); 0051 auto* change2 = new TestPieceTableChange(type2Id, description2); 0052 auto* change3 = new TestPieceTableChange(type3Id, description3); 0053 auto* change4 = new TestPieceTableChange(type4Id, description4); 0054 0055 // adding first 0056 bool result = groupPieceTableChange.appendChange(change1); 0057 0058 QVERIFY(result); 0059 QCOMPARE(groupPieceTableChange.count(), 1); 0060 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 1); 0061 QCOMPARE(groupPieceTableChange.headChangeDescription(), description1); 0062 QCOMPARE(groupPieceTableChange.changeDescription(0), description1); 0063 0064 // adding first 0065 result = groupPieceTableChange.appendChange(change2); 0066 0067 QVERIFY(result); 0068 QCOMPARE(groupPieceTableChange.count(), 2); 0069 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 2); 0070 QCOMPARE(groupPieceTableChange.headChangeDescription(), description2); 0071 QCOMPARE(groupPieceTableChange.changeDescription(0), description1); 0072 QCOMPARE(groupPieceTableChange.changeDescription(1), description2); 0073 0074 // adding third which should be merged 0075 result = groupPieceTableChange.appendChange(change3); 0076 0077 QVERIFY(!result); 0078 QCOMPARE(groupPieceTableChange.count(), 2); 0079 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 2); 0080 QCOMPARE(groupPieceTableChange.headChangeDescription(), QString(description2 + description3)); 0081 QCOMPARE(groupPieceTableChange.changeDescription(0), description1); 0082 QCOMPARE(groupPieceTableChange.changeDescription(1), QString(description2 + description3)); 0083 0084 // adding third which should not be merged as we call finishChange before 0085 groupPieceTableChange.finishChange(); 0086 result = groupPieceTableChange.appendChange(change4); 0087 0088 QVERIFY(result); 0089 QCOMPARE(groupPieceTableChange.count(), 3); 0090 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 3); 0091 QCOMPARE(groupPieceTableChange.headChangeDescription(), description4); 0092 QCOMPARE(groupPieceTableChange.changeDescription(0), description1); 0093 QCOMPARE(groupPieceTableChange.changeDescription(1), QString(description2 + description3)); 0094 QCOMPARE(groupPieceTableChange.changeDescription(2), description4); 0095 } 0096 0097 #if 0 0098 void GroupPieceTableChangeTest::testRevertBeforeChange() 0099 { 0100 GroupPieceTableChange groupPieceTableChange; 0101 PieceTable pieceTable; 0102 pieceTable.init(0); 0103 0104 const int type1Id = 1; 0105 const int type2Id = 2; 0106 const int type3Id = 3; 0107 const int type4Id = 4; 0108 const QString description1("1"); 0109 const QString description2("2"); 0110 const QString description3("3"); 0111 const QString description4("4"); 0112 TestPieceTableChange* change1 = new TestPieceTableChange(type1Id, description1, 1); 0113 TestPieceTableChange* change2 = new TestPieceTableChange(type2Id, description2, 2); 0114 TestPieceTableChange* change3 = new TestPieceTableChange(type3Id, description3, 3); 0115 TestPieceTableChange* change4 = new TestPieceTableChange(type4Id, description4, 4); 0116 Okteta::ArrayChangeMetrics changeMetrics1 = change1->metrics(); 0117 Okteta::ArrayChangeMetrics changeMetrics2 = change2->metrics(); 0118 Okteta::ArrayChangeMetrics changeMetrics3 = change3->metrics(); 0119 Okteta::ArrayChangeMetrics changeMetrics4 = change4->metrics(); 0120 Okteta::ArrayChangeMetrics revertedChangeMetrics1 = change1->metrics(); revertedChangeMetrics1.revert(); 0121 Okteta::ArrayChangeMetrics revertedChangeMetrics2 = change2->metrics(); revertedChangeMetrics2.revert(); 0122 Okteta::ArrayChangeMetrics revertedChangeMetrics3 = change3->metrics(); revertedChangeMetrics3.revert(); 0123 Okteta::ArrayChangeMetrics revertedChangeMetrics4 = change4->metrics(); revertedChangeMetrics4.revert(); 0124 0125 bool result = groupPieceTableChange.appendChange(change1); 0126 result = groupPieceTableChange.appendChange(change2); 0127 result = groupPieceTableChange.appendChange(change3); 0128 result = groupPieceTableChange.appendChange(change4); 0129 0130 // revert before first change 0131 SectionList changedSectionList; 0132 ArrayChangeMetricsList changeList; 0133 result = 0134 groupPieceTableChange.revertBeforeChange(&pieceTable, 0, &changedSectionList, &changeList); 0135 0136 QVERIFY(result); 0137 QCOMPARE(groupPieceTableChange.count(), 4); 0138 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 0); 0139 QCOMPARE(groupPieceTableChange.headChangeDescription(), description4); 0140 QCOMPARE(changedSectionList.size(), 1); 0141 QCOMPARE(changedSectionList.first(), Section(1, 4)); 0142 QCOMPARE(changeList.size(), 4); 0143 QCOMPARE(changeList[0], revertedChangeMetrics4); 0144 QCOMPARE(changeList[1], revertedChangeMetrics3); 0145 QCOMPARE(changeList[2], revertedChangeMetrics2); 0146 QCOMPARE(changeList[3], revertedChangeMetrics1); 0147 0148 // revert before last change 0149 changedSectionList.clear(); 0150 changeList.clear(); 0151 result = 0152 groupPieceTableChange.revertBeforeChange(&pieceTable, 3, &changedSectionList, &changeList); 0153 0154 QVERIFY(result); 0155 QCOMPARE(groupPieceTableChange.count(), 4); 0156 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 3); 0157 QCOMPARE(groupPieceTableChange.headChangeDescription(), description4); 0158 QCOMPARE(changedSectionList.size(), 1); 0159 QCOMPARE(changedSectionList.first(), Section(1, 3)); 0160 QCOMPARE(changeList.size(), 3); 0161 QCOMPARE(changeList[0], changeMetrics1); 0162 QCOMPARE(changeList[1], changeMetrics2); 0163 QCOMPARE(changeList[2], changeMetrics3); 0164 0165 // revert after first change 0166 changedSectionList.clear(); 0167 changeList.clear(); 0168 result = 0169 groupPieceTableChange.revertBeforeChange(&pieceTable, 1, &changedSectionList, &changeList); 0170 0171 QVERIFY(result); 0172 QCOMPARE(groupPieceTableChange.count(), 4); 0173 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 1); 0174 QCOMPARE(groupPieceTableChange.headChangeDescription(), description4); 0175 QCOMPARE(changedSectionList.size(), 1); 0176 QCOMPARE(changedSectionList.first(), Section(2, 3)); 0177 QCOMPARE(changeList.size(), 2); 0178 QCOMPARE(changeList[0], revertedChangeMetrics3); 0179 QCOMPARE(changeList[1], revertedChangeMetrics2); 0180 0181 // revert after last change 0182 changedSectionList.clear(); 0183 changeList.clear(); 0184 result = 0185 groupPieceTableChange.revertBeforeChange(&pieceTable, 4, &changedSectionList, &changeList); 0186 0187 QVERIFY(result); 0188 QCOMPARE(groupPieceTableChange.count(), 4); 0189 QCOMPARE(groupPieceTableChange.appliedChangesCount(), 4); 0190 QCOMPARE(groupPieceTableChange.headChangeDescription(), description4); 0191 QCOMPARE(changedSectionList.size(), 1); 0192 QCOMPARE(changedSectionList.first(), Section(2, 4)); 0193 QCOMPARE(changeList.size(), 3); 0194 QCOMPARE(changeList[0], changeMetrics2); 0195 QCOMPARE(changeList[1], changeMetrics3); 0196 QCOMPARE(changeList[2], changeMetrics4); 0197 } 0198 #endif 0199 } 0200 0201 QTEST_GUILESS_MAIN(KPieceTable::GroupPieceTableChangeTest) 0202 0203 #include "moc_grouppiecetablechangetest.cpp"