1 /*
2 This file is part of the Okteta Gui library, made within the KDE community.
3
4 SPDX-FileCopyrightText: 2006 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 "coordrangelisttest.hpp"
10
11 // test object
12 #include <coordrangelist.hpp>
13 // Qt
14 #include <QTest>
15
16 namespace Okteta {
17
18 // local variables
19 static constexpr LinePosition Pos1 = 15;
20 static constexpr LinePosition Pos2 = 25;
21 static constexpr Line Line1 = 10;
22 static constexpr LineSize LineCount = 10;
23 static constexpr Line Line2 = Line1 + LineCount - 1;
24 static constexpr LineSize LineDistance = 5;
25 static constexpr Line Line3 = Line2 + LineDistance;
26 static constexpr Line Line4 = Line3 + LineCount - 1;
27
28 static constexpr Coord Start1(Pos1, Line1);
29 static constexpr Coord End1(Pos2, Line2);
30 static constexpr Coord Start2(Pos1, Line3);
31 static constexpr Coord End2(Pos2, Line4);
32
testSimpleConstructor()33 void CoordRangeListTest::testSimpleConstructor()
34 {
35 CoordRangeList CoordRangeList;
36 QVERIFY(CoordRangeList.isEmpty());
37 }
38
testAddSingleSection()39 void CoordRangeListTest::testAddSingleSection()
40 {
41 CoordRangeList CoordRangeList;
42
43 CoordRange CoordRange(Start1, End1);
44 CoordRangeList.addCoordRange(CoordRange);
45 QCOMPARE(CoordRangeList.size(), 1);
46 QCOMPARE(CoordRangeList.first(), CoordRange);
47 }
48
testAddJoinableSections()49 void CoordRangeListTest::testAddJoinableSections()
50 {
51 CoordRangeList CoordRangeList;
52
53 CoordRange CoordRange1(Start1, End1);
54 CoordRange CoordRange2(Start2, End2);
55 // in front
56 Coord OtherStart(0, 0);
57 Coord OtherEnd = Start1;
58 OtherEnd.goLeft(0);
59 CoordRange OtherCoordRange(OtherStart, OtherEnd);
60 CoordRangeList.addCoordRange(CoordRange1);
61 CoordRangeList.addCoordRange(CoordRange2);
62 CoordRangeList.addCoordRange(OtherCoordRange);
63
64 QCOMPARE(CoordRangeList.size(), 2);
65 QCOMPARE(CoordRangeList.first(), CoordRange(OtherCoordRange.start(), CoordRange1.end()));
66 QCOMPARE(CoordRangeList.last(), CoordRange2);
67
68 // in the middle, with first
69 CoordRangeList.clear();
70 OtherStart = End1;
71 OtherStart.goRight(0);
72 OtherEnd = Start2;
73 OtherEnd.goLeft(1);
74 OtherCoordRange.set(OtherStart, OtherEnd);
75 CoordRangeList.addCoordRange(CoordRange1);
76 CoordRangeList.addCoordRange(CoordRange2);
77 CoordRangeList.addCoordRange(OtherCoordRange);
78
79 QCOMPARE(CoordRangeList.size(), 2);
80 QCOMPARE(CoordRangeList.first(), CoordRange(CoordRange1.start(), OtherCoordRange.end()));
81 QCOMPARE(CoordRangeList.last(), CoordRange2);
82
83 // in the middle, with both
84 CoordRangeList.clear();
85 OtherEnd.goRight(1);
86 OtherCoordRange.setEnd(OtherEnd);
87 CoordRangeList.addCoordRange(CoordRange1);
88 CoordRangeList.addCoordRange(CoordRange2);
89 CoordRangeList.addCoordRange(OtherCoordRange);
90
91 QCOMPARE(CoordRangeList.size(), 1);
92 QCOMPARE(CoordRangeList.first(), CoordRange(CoordRange1.start(), CoordRange2.end()));
93
94 // in the middle, with last
95 CoordRangeList.clear();
96 OtherStart.goRight(1);
97 OtherCoordRange.setStart(OtherStart);
98 CoordRangeList.addCoordRange(CoordRange1);
99 CoordRangeList.addCoordRange(CoordRange2);
100 CoordRangeList.addCoordRange(OtherCoordRange);
101
102 QCOMPARE(CoordRangeList.size(), 2);
103 QCOMPARE(CoordRangeList.first(), CoordRange1);
104 QCOMPARE(CoordRangeList.last(), CoordRange(OtherCoordRange.start(), CoordRange2.end()));
105
106 // behind
107 CoordRangeList.clear();
108 OtherStart = End2;
109 OtherStart.goRight(0);
110 OtherEnd = OtherStart;
111 OtherEnd.goDown(LineCount);
112 OtherCoordRange.set(OtherStart, OtherEnd);
113 CoordRangeList.addCoordRange(CoordRange1);
114 CoordRangeList.addCoordRange(CoordRange2);
115 CoordRangeList.addCoordRange(OtherCoordRange);
116
117 QCOMPARE(CoordRangeList.size(), 2);
118 QCOMPARE(CoordRangeList.first(), CoordRange1);
119 QCOMPARE(CoordRangeList.last(), CoordRange(CoordRange2.start(), OtherCoordRange.end()));
120 }
121
testAddNonJoinableSections()122 void CoordRangeListTest::testAddNonJoinableSections()
123 {
124 CoordRangeList CoordRangeList;
125
126 CoordRange CoordRange1(Start1, End1);
127 CoordRange CoordRange2(Start2, End2);
128 // in front
129 Coord OtherStart(0, 0);
130 Coord OtherEnd = Start1;
131 OtherEnd.goLeft(2);
132 CoordRange OtherCoordRange(OtherStart, OtherEnd);
133 CoordRangeList.addCoordRange(CoordRange1);
134 CoordRangeList.addCoordRange(CoordRange2);
135 CoordRangeList.addCoordRange(OtherCoordRange);
136
137 QCOMPARE(CoordRangeList.size(), 3);
138 QCOMPARE(CoordRangeList.first(), OtherCoordRange);
139 QCOMPARE(CoordRangeList.last(), CoordRange2);
140
141 // in the middle
142 CoordRangeList.clear();
143 OtherStart = End1;
144 OtherStart.goRight(2);
145 OtherEnd = Start2;
146 OtherEnd.goLeft(2);
147 OtherCoordRange.set(OtherStart, OtherEnd);
148 CoordRangeList.addCoordRange(CoordRange1);
149 CoordRangeList.addCoordRange(CoordRange2);
150 CoordRangeList.addCoordRange(OtherCoordRange);
151
152 QCOMPARE(CoordRangeList.size(), 3);
153 QCOMPARE(CoordRangeList.first(), CoordRange1);
154 QCOMPARE(CoordRangeList.last(), CoordRange2);
155
156 // behind
157 CoordRangeList.clear();
158 OtherStart = End2;
159 OtherStart.goRight(2);
160 OtherEnd = OtherStart;
161 OtherEnd.goDown(LineCount);
162 OtherCoordRange.set(OtherStart, OtherEnd);
163 CoordRangeList.addCoordRange(CoordRange1);
164 CoordRangeList.addCoordRange(CoordRange2);
165 CoordRangeList.addCoordRange(OtherCoordRange);
166
167 QCOMPARE(CoordRangeList.size(), 3);
168 QCOMPARE(CoordRangeList.first(), CoordRange1);
169 QCOMPARE(CoordRangeList.last(), OtherCoordRange);
170 }
171
172 }
173
174 QTEST_MAIN(Okteta::CoordRangeListTest)
175