File indexing completed on 2024-04-28 05:52:39
0001 /* 0002 This file is part of the Okteta Gui library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2006 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "coordrangetest.hpp" 0010 0011 // test object 0012 #include <coordrange.hpp> 0013 // Qt 0014 #include <QTest> 0015 0016 namespace Okteta { 0017 0018 // local variables 0019 static constexpr LinePosition Pos1 = 15; 0020 static constexpr LinePosition Pos2 = 25; 0021 static constexpr Line Line1 = 10; 0022 static constexpr LineSize LineCount = 10; 0023 static constexpr Line Line2 = Line1 + LineCount - 1; 0024 static constexpr Coord Start(Pos1, Line1); 0025 static constexpr Coord End(Pos2, Line2); 0026 0027 static constexpr Size BufferWidth = Pos2 + 5; 0028 0029 void CoordRangeTest::testConstructorByCoords() 0030 { 0031 CoordRange coordRange(Start, End); 0032 QCOMPARE(coordRange.start(), Start); 0033 QCOMPARE(coordRange.end(), End); 0034 QCOMPARE(coordRange.lines(), LineCount); 0035 QVERIFY(coordRange.isValid()); 0036 } 0037 0038 void CoordRangeTest::testConstructorByPosLines() 0039 { 0040 LinePositionRange positions(Pos1, Pos2); 0041 LineRange lines(Line1, Line2); 0042 0043 CoordRange coordRange(positions, lines); 0044 QCOMPARE(coordRange.start(), Coord(Pos1, Line1)); 0045 QCOMPARE(coordRange.end(), Coord(Pos2, Line2)); 0046 QCOMPARE(coordRange.lines(), LineCount); 0047 QVERIFY(coordRange.isValid()); 0048 } 0049 0050 void CoordRangeTest::testSimpleConstructor() 0051 { 0052 CoordRange coordRange; 0053 QVERIFY(coordRange.isEmpty()); 0054 QVERIFY(!coordRange.isValid()); 0055 } 0056 0057 void CoordRangeTest::testSetGetStart() 0058 { 0059 CoordRange coordRange; 0060 coordRange.setStart(Start); 0061 QCOMPARE(coordRange.start(), Start); 0062 } 0063 0064 void CoordRangeTest::testSetGetEnd() 0065 { 0066 CoordRange coordRange; 0067 coordRange.setEnd(End); 0068 QCOMPARE(coordRange.end(), End); 0069 } 0070 0071 void CoordRangeTest::testIsEmpty() 0072 { 0073 CoordRange coordRange(Start, End); 0074 QVERIFY(!coordRange.isEmpty()); 0075 coordRange.unset(); 0076 QVERIFY(coordRange.isEmpty()); 0077 } 0078 0079 void CoordRangeTest::testCompare() 0080 { 0081 CoordRange coordRange(Start, End); 0082 // same 0083 CoordRange otherCoordRange(Start, End); 0084 QVERIFY(coordRange == otherCoordRange); 0085 // different start 0086 otherCoordRange.set(Coord(Pos1 + 1, Line1), End); 0087 QVERIFY(!(coordRange == otherCoordRange)); 0088 // different end 0089 otherCoordRange.set(Start, Coord(Pos2 + 1, Line2)); 0090 QVERIFY(!(coordRange == otherCoordRange)); 0091 } 0092 0093 void CoordRangeTest::testIncludes() 0094 { 0095 CoordRange coordRange(Start, End); 0096 // at start 0097 Coord coord = coordRange.start(); 0098 QVERIFY(coordRange.includes(coord)); 0099 // before start 0100 coord.goLeft(); 0101 QVERIFY(!coordRange.includes(coord)); 0102 // at end 0103 coord = coordRange.end(); 0104 QVERIFY(coordRange.includes(coord)); 0105 // behind end 0106 coord.goRight(); 0107 QVERIFY(!coordRange.includes(coord)); 0108 } 0109 0110 void CoordRangeTest::testIncludesLine() 0111 { 0112 CoordRange coordRange(Start, End); 0113 // at start 0114 Line L = coordRange.start().line(); 0115 QVERIFY(coordRange.includesLine(L)); 0116 // before start 0117 --L; 0118 QVERIFY(!coordRange.includesLine(L)); 0119 // at end 0120 L = coordRange.end().line(); 0121 QVERIFY(coordRange.includesLine(L)); 0122 // behind end 0123 ++L; 0124 QVERIFY(!coordRange.includesLine(L)); 0125 } 0126 0127 void CoordRangeTest::testWidth() 0128 { 0129 CoordRange coordRange(Start, End); 0130 const Size width = BufferWidth * (LineCount - 1) - Start.pos() + End.pos() + 1; 0131 QCOMPARE(coordRange.width(BufferWidth), width); 0132 } 0133 0134 /* 0135 0136 void CoordRangeTest::testAdaptToChange() 0137 { 0138 // adaptToChange, same length, behind 0139 CoordRange coordRange( Start, End ); 0140 CoordRange otherCoordRange( coordRange ); 0141 coordRange.adaptToChange( End+1, Width, Width ); 0142 QCOMPARE( coordRange, otherCoordRange ); 0143 0144 // adaptToChange, same length, before 0145 coordRange.set( Start, End ); 0146 otherCoordRange.set( coordRange ); 0147 coordRange.adaptToChange( Start-2, 1, 1 ); 0148 QCOMPARE( coordRange, otherCoordRange ); 0149 0150 // adaptToChange, same length, -1,-1 0151 coordRange.set( Start-1, End-1 ); 0152 otherCoordRange.set( Start-1, Start-1 ); 0153 coordRange.adaptToChange( Start, Width, Width ); 0154 QCOMPARE( coordRange, otherCoordRange ); 0155 0156 // adaptToChange, same length, -1,0 0157 coordRange.set( Start-1, End ); 0158 otherCoordRange.set( coordRange ); 0159 coordRange.adaptToChange( Start, Width, Width ); 0160 QCOMPARE( coordRange, otherCoordRange ); 0161 0162 // adaptToChange, same length, -1,+1 0163 coordRange.set( Start-1, End+1 ); 0164 otherCoordRange.set( coordRange ); 0165 coordRange.adaptToChange( Start, Width, Width ); 0166 QCOMPARE( coordRange, otherCoordRange ); 0167 0168 // adaptToChange, same length, 0,-1 0169 coordRange.set( Start, End-1 ); 0170 otherCoordRange.set( coordRange ); 0171 coordRange.adaptToChange( Start, Width, Width ); 0172 QVERIFY( !coordRange.isValid() ); 0173 0174 // adaptToChange, same length, 0,0 0175 coordRange.set( Start, End ); 0176 otherCoordRange.set( coordRange ); 0177 coordRange.adaptToChange( Start, Width, Width ); 0178 QCOMPARE( coordRange, otherCoordRange ); 0179 0180 // adaptToChange, same length, 0,+1 0181 coordRange.set( Start, End+1 ); 0182 otherCoordRange.set( coordRange ); 0183 coordRange.adaptToChange( Start, Width, Width ); 0184 QCOMPARE( coordRange, otherCoordRange ); 0185 0186 // adaptToChange, same length, +1,-1 0187 coordRange.set( Start+1, End-1 ); 0188 coordRange.adaptToChange( Start, Width, Width ); 0189 QVERIFY( !coordRange.isValid() ); 0190 0191 // adaptToChange, same length, +1,0 0192 coordRange.set( Start+1, End ); 0193 coordRange.adaptToChange( Start, Width, Width ); 0194 QVERIFY( !coordRange.isValid() ); 0195 0196 // adaptToChange, same length, +1,+1 0197 coordRange.set( Start+1, End+1 ); 0198 otherCoordRange.set( End+1, End+1 ); 0199 coordRange.adaptToChange( Start, Width, Width ); 0200 QCOMPARE( coordRange, otherCoordRange ); 0201 0202 0203 // adaptToChange, less length, behind 0204 coordRange.set( Start, End ); 0205 otherCoordRange.set( coordRange ); 0206 coordRange.adaptToChange( End+1, Width, Width-2 ); 0207 QCOMPARE( coordRange, otherCoordRange ); 0208 0209 // adaptToChange, less length, before 0210 coordRange.set( Start, End ); 0211 otherCoordRange.set( Start-2, End-2 ); 0212 coordRange.adaptToChange( Start-Width, Width, Width-2 ); 0213 QCOMPARE( coordRange, otherCoordRange ); 0214 0215 // adaptToChange, less length, -1,-1 0216 coordRange.set( Start-1, End-1 ); 0217 otherCoordRange.set( Start-1, Start-1 ); 0218 coordRange.adaptToChange( Start, Width, Width-2 ); 0219 QCOMPARE( coordRange, otherCoordRange ); 0220 0221 // adaptToChange, less length, -1,0 0222 coordRange.set( Start-1, End ); 0223 otherCoordRange.set( Start-1, End-2 ); 0224 coordRange.adaptToChange( Start, Width, Width-2 ); 0225 QCOMPARE( coordRange, otherCoordRange ); 0226 0227 // adaptToChange, less length, -1,+1 0228 coordRange.set( Start-1, End+1 ); 0229 otherCoordRange.set( Start-1, End-1 ); 0230 coordRange.adaptToChange( Start, Width, Width-2 ); 0231 QCOMPARE( coordRange, otherCoordRange ); 0232 0233 // adaptToChange, less length, 0,-1 0234 coordRange.set( Start, End-1 ); 0235 coordRange.adaptToChange( Start, Width, Width-2 ); 0236 QVERIFY( !coordRange.isValid() ); 0237 0238 // adaptToChange, less length, 0,0 0239 coordRange.set( Start, End ); 0240 otherCoordRange.set( Start, End-2 ); 0241 coordRange.adaptToChange( Start, Width, Width-2 ); 0242 QCOMPARE( coordRange, otherCoordRange ); 0243 0244 // adaptToChange, less length, 0,+1 0245 coordRange.set( Start, End+1 ); 0246 otherCoordRange.set( Start, End-1 ); 0247 coordRange.adaptToChange( Start, Width, Width-2 ); 0248 QCOMPARE( coordRange, otherCoordRange ); 0249 0250 // adaptToChange, less length, +1,-1 0251 coordRange.set( Start+1, End-1 ); 0252 coordRange.adaptToChange( Start, Width, Width-2 ); 0253 QVERIFY( !coordRange.isValid() ); 0254 0255 // adaptToChange, less length, +1,0 0256 coordRange.set( Start+1, End ); 0257 coordRange.adaptToChange( Start, Width, Width-2 ); 0258 QVERIFY( !coordRange.isValid() ); 0259 0260 // adaptToChange, less length, +1,+1 0261 coordRange.set( Start+1, End+1 ); 0262 otherCoordRange.set( End-1, End-1 ); 0263 coordRange.adaptToChange( Start, Width, Width-2 ); 0264 QCOMPARE( coordRange, otherCoordRange ); 0265 0266 0267 // adaptToChange, greater length, behind 0268 coordRange.set( Start, End ); 0269 otherCoordRange.set( coordRange ); 0270 coordRange.adaptToChange( End+1, Width, Width+2 ); 0271 QCOMPARE( coordRange, otherCoordRange ); 0272 0273 // adaptToChange, greater length, before 0274 coordRange.set( Start, End ); 0275 otherCoordRange.set( Start+2, End+2 ); 0276 coordRange.adaptToChange( Start-Width, Width, Width+2 ); 0277 QCOMPARE( coordRange, otherCoordRange ); 0278 0279 // adaptToChange, greater length, -1,-1 0280 coordRange.set( Start-1, End-1 ); 0281 otherCoordRange.set( Start-1, Start-1 ); 0282 coordRange.adaptToChange( Start, Width, Width+2 ); 0283 QCOMPARE( coordRange, otherCoordRange ); 0284 0285 // adaptToChange, greater length, -1,0 0286 coordRange.set( Start-1, End ); 0287 otherCoordRange.set( Start-1, End+2 ); 0288 coordRange.adaptToChange( Start, Width, Width+2 ); 0289 QCOMPARE( coordRange, otherCoordRange ); 0290 0291 // adaptToChange, greater length, -1,+1 0292 coordRange.set( Start-1, End+1 ); 0293 otherCoordRange.set( Start-1, End+3 ); 0294 coordRange.adaptToChange( Start, Width, Width+2 ); 0295 QCOMPARE( coordRange, otherCoordRange ); 0296 0297 // adaptToChange, greater length, 0,-1 0298 coordRange.set( Start, End-1 ); 0299 coordRange.adaptToChange( Start, Width, Width+2 ); 0300 QVERIFY( !coordRange.isValid() ); 0301 0302 // adaptToChange, greater length, 0,0 0303 coordRange.set( Start, End ); 0304 otherCoordRange.set( Start, End+2 ); 0305 coordRange.adaptToChange( Start, Width, Width+2 ); 0306 QCOMPARE( coordRange, otherCoordRange ); 0307 0308 // adaptToChange, greater length, 0,+1 0309 coordRange.set( Start, End+1 ); 0310 otherCoordRange.set( Start, End+3 ); 0311 coordRange.adaptToChange( Start, Width, Width+2 ); 0312 QCOMPARE( coordRange, otherCoordRange ); 0313 0314 // adaptToChange, greater length, +1,-1 0315 coordRange.set( Start+1, End-1 ); 0316 coordRange.adaptToChange( Start, Width, Width+2 ); 0317 QVERIFY( !coordRange.isValid() ); 0318 0319 // adaptToChange, greater length, +1,0 0320 coordRange.set( Start+1, End ); 0321 coordRange.adaptToChange( Start, Width, Width+2 ); 0322 QVERIFY( !coordRange.isValid() ); 0323 0324 // adaptToChange, greater length, +1,+1 0325 coordRange.set( Start+1, End+1 ); 0326 otherCoordRange.set( End+3, End+3 ); 0327 coordRange.adaptToChange( Start, Width, Width+2 ); 0328 QCOMPARE( coordRange, otherCoordRange ); 0329 0330 0331 // adaptToChange, insert, behind 0332 coordRange.set( Start-1, Start-1 ); 0333 otherCoordRange.set( Start-1, End ); 0334 coordRange.adaptToChange( Start, 0, Width ); 0335 QCOMPARE( coordRange, otherCoordRange ); 0336 0337 // adaptToChange, insert, middle 0338 coordRange.set( Start-1, Start ); 0339 otherCoordRange.set( Start-1, End+1 ); 0340 coordRange.adaptToChange( Start, 0, Width ); 0341 QCOMPARE( coordRange, otherCoordRange ); 0342 0343 // adaptToChange, insert, before 0344 coordRange.set( Start, Start ); 0345 otherCoordRange.set( End+1, End+1 ); 0346 coordRange.adaptToChange( Start, 0, Width ); 0347 QCOMPARE( coordRange, otherCoordRange ); 0348 } 0349 0350 void CoordRangeTest::testStartForInclude() 0351 { 0352 // testStartForInclude, same length, start at start 0353 const CoordRange coordRange( Start, End ); 0354 CoordRange otherCoordRange( coordRange ); 0355 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0356 0357 // testStartForInclude, same length, start before start 0358 otherCoordRange.moveBy( -1 ); 0359 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0360 0361 // testStartForInclude, same length, end behind end 0362 otherCoordRange.moveBy( 2 ); 0363 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0364 0365 // testStartForInclude, smaller length, start at start 0366 otherCoordRange.set( Start, End-1 ); 0367 int Diff = coordRange.width() - otherCoordRange.width(); 0368 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0369 0370 // testStartForInclude, smaller length, start before start 0371 otherCoordRange.moveBy( -1 ); 0372 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0373 0374 // testStartForInclude, smaller length, end behind end 0375 otherCoordRange.moveBy( 2 ); 0376 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start()-Diff ); 0377 0378 * // undefined in startForInclude 0379 // testStartForInclude, greater length, start at start 0380 otherCoordRange.set( Start, End+1 ); 0381 Diff = coordRange.width() - otherCoordRange.width(); 0382 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0383 0384 // testStartForInclude, smaller length, start before start 0385 otherCoordRange.moveBy( -1 ); 0386 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() ); 0387 0388 // testStartForInclude, smaller length, end behind end 0389 otherCoordRange.moveBy( 2 ); 0390 QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start()-Diff ); 0391 * 0392 } 0393 0394 0395 void CoordRangeTest::testIsJoinable() 0396 { 0397 // testStartForInclude, same length, start at start 0398 const CoordRange coordRange( Start, End ); 0399 CoordRange otherCoordRange( coordRange ); 0400 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0401 0402 // adaptToChange, insert, before 0403 otherCoordRange.set( End+1, End+Width ); 0404 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0405 0406 // Overlapping, right shifted 0407 otherCoordRange.set( Start+1, End+1 ); 0408 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0409 0410 // Overlapping, left shifted 0411 otherCoordRange.set( Start-1, End-1 ); 0412 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0413 0414 // Overlapping, 1 includes 2 0415 otherCoordRange.set( Start+1, End-1 ); 0416 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0417 0418 // Overlapping, 2 includes 1 0419 otherCoordRange.set( Start-1, End+1 ); 0420 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0421 0422 // Overlapping, identic 0423 otherCoordRange.set( coordRange ); 0424 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0425 0426 // Coupled, first, then second 0427 otherCoordRange.set( End+1, End+Width ); 0428 QVERIFY( coordRange.isJoinable(otherCoordRange) ); 0429 0430 // Coupled, second, then first 0431 QVERIFY( otherCoordRange.isJoinable(coordRange) ); 0432 0433 // NonOverlapping, first, then second 0434 otherCoordRange.set( End+2, End+Width+1 ); 0435 QVERIFY( !coordRange.isJoinable(otherCoordRange) ); 0436 0437 // NonOverlapping, second, then first 0438 QVERIFY( !otherCoordRange.isJoinable(coordRange) ); 0439 } 0440 */ 0441 0442 } 0443 0444 QTEST_MAIN(Okteta::CoordRangeTest) 0445 0446 #include "moc_coordrangetest.cpp"