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