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 "abstractpiecetablechangeiftest.hpp"
10
11 // test object
12 #include <piecetable/abstractpiecetablechange.hpp>
13 // lib
14 #include "testpiecetablechange.hpp"
15 #include <piecetable/piecetable.hpp>
16 // Qt
17 #include <QTest>
18
19 namespace KPieceTable {
20
21 static constexpr Size BaseSize = 100;
22 static constexpr Address ChangeStorageOffset = 23;
23
24 //---------------------------------------------------------------- Tests -----
25
init()26 void AbstractPieceTableChangeIfTest::init()
27 {
28 mPieceTableChange = createPieceTableChange();
29 }
30
cleanup()31 void AbstractPieceTableChangeIfTest::cleanup()
32 {
33 deletePieceTableChange(mPieceTableChange);
34 }
35
36 //---------------------------------------------------------------- Tests -----
37
testMerge()38 void AbstractPieceTableChangeIfTest::testMerge()
39 {
40 TestPieceTableChange testChange;
41
42 int typeId = mPieceTableChange->type();
43 QString description = mPieceTableChange->description();
44 bool result = mPieceTableChange->merge(&testChange);
45
46 QVERIFY(!result);
47 QCOMPARE(mPieceTableChange->type(), typeId);
48 QCOMPARE(mPieceTableChange->description(), description);
49 }
50
testRevertApply()51 void AbstractPieceTableChangeIfTest::testRevertApply()
52 {
53 PieceTable pieceTable;
54 pieceTable.init(0);
55 pieceTable.insert(0, BaseSize, ChangeStorageOffset);
56
57 // do change which creates this
58 changePieceTable(&pieceTable);
59 mPieceTableChange->revert(&pieceTable);
60
61 QCOMPARE(pieceTable.size(), BaseSize);
62 for (int i = 0; i < BaseSize; ++i) {
63 int storageId;
64 Address storageOffset;
65 bool result = pieceTable.getStorageData(&storageId, &storageOffset, i);
66
67 QVERIFY(result);
68 QCOMPARE(storageOffset, i + ChangeStorageOffset);
69 QCOMPARE(storageId, (int)Piece::ChangeStorage);
70 }
71
72 // now replay changes
73 mPieceTableChange->apply(&pieceTable);
74 mPieceTableChange->revert(&pieceTable);
75
76 QCOMPARE(pieceTable.size(), BaseSize);
77 for (Address i = 0; i < BaseSize; ++i) {
78 int storageId;
79 Address storageOffset;
80 bool result = pieceTable.getStorageData(&storageId, &storageOffset, i);
81
82 QVERIFY(result);
83 QCOMPARE(storageOffset, i + ChangeStorageOffset);
84 QCOMPARE(storageId, (int)Piece::ChangeStorage);
85 }
86 }
87
88 }
89