1 /*
2     This file is part of the Okteta Core library, made within the KDE community.
3 
4     SPDX-FileCopyrightText: 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8 
9 #include "grouppiecetablechangetest.hpp"
10 
11 // test object
12 #include <piecetable/grouppiecetablechange.hpp>
13 // test
14 #include "testpiecetablechange.hpp"
15 #include <piecetable/piecetable.hpp>
16 //
17 #include <arraychangemetricslist.hpp>
18 // Qt
19 #include <QTest>
20 
21 namespace KPieceTable {
22 
23 // local variables
24 // TODO QStringLiteral
25 static constexpr char Description[] = "description";
26 
testConstructor()27 void GroupPieceTableChangeTest::testConstructor()
28 {
29     GroupPieceTableChange groupPieceTableChange(nullptr, QLatin1String(Description));
30 
31 //     QCOMPARE( groupPieceTableChange.count(), 0 );
32     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 0);
33     QCOMPARE(groupPieceTableChange.parent(), (GroupPieceTableChange*)nullptr);
34     QCOMPARE(groupPieceTableChange.dataSize(), 0);
35     QCOMPARE(groupPieceTableChange.description(), QLatin1String(Description));
36 }
37 
testAppendChange()38 void GroupPieceTableChangeTest::testAppendChange()
39 {
40     GroupPieceTableChange groupPieceTableChange(nullptr, QLatin1String(Description));
41 
42     const int type1Id = 1;
43     const int type2Id = 2;
44     const int type3Id = type2Id;
45     const int type4Id = 4;
46     const QString description1 = QStringLiteral("1");
47     const QString description2 = QStringLiteral("2");
48     const QString description3 = QStringLiteral("3");
49     const QString description4 = QStringLiteral("4");
50     auto* change1 = new TestPieceTableChange(type1Id, description1);
51     auto* change2 = new TestPieceTableChange(type2Id, description2);
52     auto* change3 = new TestPieceTableChange(type3Id, description3);
53     auto* change4 = new TestPieceTableChange(type4Id, description4);
54 
55     // adding first
56     bool result = groupPieceTableChange.appendChange(change1);
57 
58     QVERIFY(result);
59     QCOMPARE(groupPieceTableChange.count(), 1);
60     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 1);
61     QCOMPARE(groupPieceTableChange.headChangeDescription(), description1);
62     QCOMPARE(groupPieceTableChange.changeDescription(0), description1);
63 
64     // adding first
65     result = groupPieceTableChange.appendChange(change2);
66 
67     QVERIFY(result);
68     QCOMPARE(groupPieceTableChange.count(), 2);
69     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 2);
70     QCOMPARE(groupPieceTableChange.headChangeDescription(), description2);
71     QCOMPARE(groupPieceTableChange.changeDescription(0), description1);
72     QCOMPARE(groupPieceTableChange.changeDescription(1), description2);
73 
74     // adding third which should be merged
75     result = groupPieceTableChange.appendChange(change3);
76 
77     QVERIFY(!result);
78     QCOMPARE(groupPieceTableChange.count(), 2);
79     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 2);
80     QCOMPARE(groupPieceTableChange.headChangeDescription(), QString(description2 + description3));
81     QCOMPARE(groupPieceTableChange.changeDescription(0), description1);
82     QCOMPARE(groupPieceTableChange.changeDescription(1), QString(description2 + description3));
83 
84     // adding third which should not be merged as we call finishChange before
85     groupPieceTableChange.finishChange();
86     result = groupPieceTableChange.appendChange(change4);
87 
88     QVERIFY(result);
89     QCOMPARE(groupPieceTableChange.count(), 3);
90     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 3);
91     QCOMPARE(groupPieceTableChange.headChangeDescription(), description4);
92     QCOMPARE(groupPieceTableChange.changeDescription(0), description1);
93     QCOMPARE(groupPieceTableChange.changeDescription(1), QString(description2 + description3));
94     QCOMPARE(groupPieceTableChange.changeDescription(2), description4);
95 }
96 
97 #if 0
98 void GroupPieceTableChangeTest::testRevertBeforeChange()
99 {
100     GroupPieceTableChange groupPieceTableChange;
101     PieceTable pieceTable;
102     pieceTable.init(0);
103 
104     const int type1Id = 1;
105     const int type2Id = 2;
106     const int type3Id = 3;
107     const int type4Id = 4;
108     const QString description1("1");
109     const QString description2("2");
110     const QString description3("3");
111     const QString description4("4");
112     TestPieceTableChange* change1 = new TestPieceTableChange(type1Id, description1, 1);
113     TestPieceTableChange* change2 = new TestPieceTableChange(type2Id, description2, 2);
114     TestPieceTableChange* change3 = new TestPieceTableChange(type3Id, description3, 3);
115     TestPieceTableChange* change4 = new TestPieceTableChange(type4Id, description4, 4);
116     Okteta::ArrayChangeMetrics changeMetrics1 = change1->metrics();
117     Okteta::ArrayChangeMetrics changeMetrics2 = change2->metrics();
118     Okteta::ArrayChangeMetrics changeMetrics3 = change3->metrics();
119     Okteta::ArrayChangeMetrics changeMetrics4 = change4->metrics();
120     Okteta::ArrayChangeMetrics revertedChangeMetrics1 = change1->metrics(); revertedChangeMetrics1.revert();
121     Okteta::ArrayChangeMetrics revertedChangeMetrics2 = change2->metrics(); revertedChangeMetrics2.revert();
122     Okteta::ArrayChangeMetrics revertedChangeMetrics3 = change3->metrics(); revertedChangeMetrics3.revert();
123     Okteta::ArrayChangeMetrics revertedChangeMetrics4 = change4->metrics(); revertedChangeMetrics4.revert();
124 
125     bool result = groupPieceTableChange.appendChange(change1);
126     result = groupPieceTableChange.appendChange(change2);
127     result = groupPieceTableChange.appendChange(change3);
128     result = groupPieceTableChange.appendChange(change4);
129 
130     // revert before first change
131     SectionList changedSectionList;
132     ArrayChangeMetricsList changeList;
133     result =
134         groupPieceTableChange.revertBeforeChange(&pieceTable, 0, &changedSectionList, &changeList);
135 
136     QVERIFY(result);
137     QCOMPARE(groupPieceTableChange.count(), 4);
138     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 0);
139     QCOMPARE(groupPieceTableChange.headChangeDescription(), description4);
140     QCOMPARE(changedSectionList.count(), 1);
141     QCOMPARE(changedSectionList.first(), Section(1, 4));
142     QCOMPARE(changeList.count(), 4);
143     QCOMPARE(changeList[0], revertedChangeMetrics4);
144     QCOMPARE(changeList[1], revertedChangeMetrics3);
145     QCOMPARE(changeList[2], revertedChangeMetrics2);
146     QCOMPARE(changeList[3], revertedChangeMetrics1);
147 
148     // revert before last change
149     changedSectionList.clear();
150     changeList.clear();
151     result =
152         groupPieceTableChange.revertBeforeChange(&pieceTable, 3, &changedSectionList, &changeList);
153 
154     QVERIFY(result);
155     QCOMPARE(groupPieceTableChange.count(), 4);
156     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 3);
157     QCOMPARE(groupPieceTableChange.headChangeDescription(), description4);
158     QCOMPARE(changedSectionList.count(), 1);
159     QCOMPARE(changedSectionList.first(), Section(1, 3));
160     QCOMPARE(changeList.count(), 3);
161     QCOMPARE(changeList[0], changeMetrics1);
162     QCOMPARE(changeList[1], changeMetrics2);
163     QCOMPARE(changeList[2], changeMetrics3);
164 
165     // revert after first change
166     changedSectionList.clear();
167     changeList.clear();
168     result =
169         groupPieceTableChange.revertBeforeChange(&pieceTable, 1, &changedSectionList, &changeList);
170 
171     QVERIFY(result);
172     QCOMPARE(groupPieceTableChange.count(), 4);
173     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 1);
174     QCOMPARE(groupPieceTableChange.headChangeDescription(), description4);
175     QCOMPARE(changedSectionList.count(), 1);
176     QCOMPARE(changedSectionList.first(), Section(2, 3));
177     QCOMPARE(changeList.count(), 2);
178     QCOMPARE(changeList[0], revertedChangeMetrics3);
179     QCOMPARE(changeList[1], revertedChangeMetrics2);
180 
181     // revert after last change
182     changedSectionList.clear();
183     changeList.clear();
184     result =
185         groupPieceTableChange.revertBeforeChange(&pieceTable, 4, &changedSectionList, &changeList);
186 
187     QVERIFY(result);
188     QCOMPARE(groupPieceTableChange.count(), 4);
189     QCOMPARE(groupPieceTableChange.appliedChangesCount(), 4);
190     QCOMPARE(groupPieceTableChange.headChangeDescription(), description4);
191     QCOMPARE(changedSectionList.count(), 1);
192     QCOMPARE(changedSectionList.first(), Section(2, 4));
193     QCOMPARE(changeList.count(), 3);
194     QCOMPARE(changeList[0], changeMetrics2);
195     QCOMPARE(changeList[1], changeMetrics3);
196     QCOMPARE(changeList[2], changeMetrics4);
197 }
198 #endif
199 }
200 
201 QTEST_GUILESS_MAIN(KPieceTable::GroupPieceTableChangeTest)
202