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