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"