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