File indexing completed on 2024-04-28 05:52:32
0001 /* 0002 This file is part of the Okteta Core library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2007 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 "bookmarklisttest.hpp" 0010 0011 // test object 0012 #include <bookmarklist.hpp> 0013 // Qt 0014 #include <QVector> 0015 #include <QTest> 0016 // Std 0017 #include <utility> 0018 0019 using namespace Okteta; 0020 0021 static constexpr int Offset1 = 7; 0022 static constexpr int Offset2 = 23; 0023 static constexpr int Offset3 = 45; 0024 static constexpr int Offset4 = 67; 0025 static constexpr int Distance12 = Offset2 - Offset1; 0026 static constexpr int Distance23 = Offset3 - Offset2; 0027 static constexpr int Distance34 = Offset4 - Offset3; 0028 static constexpr int Distance13 = Distance12 + Distance23; 0029 0030 void BookmarkListTest::testSimpleConstructor() 0031 { 0032 BookmarkList bookmarkList; 0033 0034 QVERIFY(bookmarkList.isEmpty()); 0035 } 0036 0037 void BookmarkListTest::testAddRemoveBookmark() 0038 { 0039 const Bookmark bookmark1(Offset1); 0040 const Bookmark bookmark2(Offset2); 0041 0042 BookmarkList bookmarkList; 0043 0044 bookmarkList.addBookmark(bookmark1); 0045 0046 QVERIFY(bookmarkList.first() == bookmark1); 0047 QVERIFY(!bookmarkList.isEmpty()); 0048 0049 bookmarkList.addBookmark(bookmark2); 0050 0051 QVERIFY(bookmarkList.first() == bookmark1); 0052 QVERIFY(!bookmarkList.isEmpty()); 0053 QCOMPARE(bookmarkList.size(), 2); 0054 0055 bookmarkList.removeBookmark(bookmark1); 0056 0057 QVERIFY(bookmarkList.first() == bookmark2); 0058 QVERIFY(!bookmarkList.isEmpty()); 0059 0060 bookmarkList.removeBookmark(bookmark2); 0061 0062 QVERIFY(bookmarkList.isEmpty()); 0063 } 0064 0065 void BookmarkListTest::testContains() 0066 { 0067 const Bookmark bookmark1(Offset1); 0068 const Bookmark bookmark2(Offset2); 0069 0070 BookmarkList bookmarkList; 0071 0072 QVERIFY(!bookmarkList.contains(bookmark1.offset())); 0073 QVERIFY(!bookmarkList.contains(bookmark2.offset())); 0074 0075 bookmarkList.addBookmark(bookmark1); 0076 QVERIFY(bookmarkList.contains(bookmark1.offset())); 0077 QVERIFY(!bookmarkList.contains(bookmark2.offset())); 0078 0079 bookmarkList.addBookmark(bookmark2); 0080 QVERIFY(bookmarkList.contains(bookmark1.offset())); 0081 QVERIFY(bookmarkList.contains(bookmark2.offset())); 0082 0083 bookmarkList.removeBookmark(bookmark2); 0084 QVERIFY(bookmarkList.contains(bookmark1.offset())); 0085 QVERIFY(!bookmarkList.contains(bookmark2.offset())); 0086 0087 bookmarkList.removeBookmark(bookmark1); 0088 QVERIFY(!bookmarkList.contains(bookmark1.offset())); 0089 QVERIFY(!bookmarkList.contains(bookmark2.offset())); 0090 } 0091 // TODO: these functions (in a variant) are now part of BookmarksConstIterator 0092 #if 0 0093 void BookmarkListTest::testPreviousFrom() 0094 { 0095 const Bookmark bookmark1(Offset1); 0096 const Bookmark bookmark2(Offset2); 0097 0098 BookmarkList bookmarkList; 0099 0100 bookmarkList.addBookmark(bookmark1); 0101 bookmarkList.addBookmark(bookmark2); 0102 0103 QVERIFY(bookmarkList.previousFrom(Offset1 - 1) == bookmarkList.end()); 0104 QVERIFY(*bookmarkList.previousFrom(Offset1) == bookmark1); 0105 QVERIFY(*bookmarkList.previousFrom(Offset2 - 1) == bookmark1); 0106 QVERIFY(*bookmarkList.previousFrom(Offset2) == bookmark2); 0107 QVERIFY(*bookmarkList.previousFrom(Offset2 + 1) == bookmark2); 0108 } 0109 0110 void BookmarkListTest::testNextFrom() 0111 { 0112 const Bookmark bookmark1(Offset1); 0113 const Bookmark bookmark2(Offset2); 0114 0115 BookmarkList bookmarkList; 0116 0117 bookmarkList.addBookmark(bookmark1); 0118 bookmarkList.addBookmark(bookmark2); 0119 0120 QVERIFY(*bookmarkList.nextFrom(Offset1 - 1) == bookmark1); 0121 QVERIFY(*bookmarkList.nextFrom(Offset1) == bookmark1); 0122 QVERIFY(*bookmarkList.nextFrom(Offset1 + 1) == bookmark2); 0123 QVERIFY(*bookmarkList.nextFrom(Offset2) == bookmark2); 0124 QVERIFY(bookmarkList.nextFrom(Offset2 + 1) == bookmarkList.end()); 0125 } 0126 #endif 0127 void BookmarkListTest::testAdjustToReplaced() 0128 { 0129 const Bookmark bookmark1(Offset1); 0130 const Bookmark bookmark2(Offset2); 0131 const Bookmark bookmark3(Offset3); 0132 0133 BookmarkList bookmarkList; 0134 0135 // replace after last -> no changes 0136 constexpr int behindOffset3 = Offset3 + 1; 0137 bookmarkList.addBookmark(bookmark1); 0138 bookmarkList.addBookmark(bookmark2); 0139 bookmarkList.addBookmark(bookmark3); 0140 bool adjusted = bookmarkList.adjustToReplaced(behindOffset3, 20, 19); 0141 0142 QCOMPARE(bookmarkList.size(), 3); 0143 QVERIFY(!bookmarkList.isEmpty()); 0144 QVERIFY(!adjusted); 0145 0146 // replace before first with same length -> no changes 0147 bookmarkList.clear(); 0148 bookmarkList.addBookmark(bookmark1); 0149 bookmarkList.addBookmark(bookmark2); 0150 bookmarkList.addBookmark(bookmark3); 0151 0152 adjusted = bookmarkList.adjustToReplaced(0, 5, 5); 0153 0154 QCOMPARE(bookmarkList.size(), 3); 0155 QVERIFY(!bookmarkList.isEmpty()); 0156 QVERIFY(!adjusted); 0157 0158 // replace after 1 and before 3 with same length 0159 constexpr int replaceLength = Distance13 - 1; 0160 constexpr int behindOffset1 = Offset1 + 1; 0161 bookmarkList.clear(); 0162 bookmarkList.addBookmark(bookmark1); 0163 bookmarkList.addBookmark(bookmark2); 0164 bookmarkList.addBookmark(bookmark3); 0165 bookmarkList.adjustToReplaced(behindOffset1, replaceLength, replaceLength); 0166 0167 QVERIFY(bookmarkList.first() == bookmark1); 0168 QVERIFY(bookmarkList.last() == bookmark3); 0169 QCOMPARE(bookmarkList.size(), 2); 0170 QVERIFY(!bookmarkList.isEmpty()); 0171 0172 // replace after 1 and before 3 with longer length 0173 constexpr int longer = 5; 0174 bookmarkList.clear(); 0175 bookmarkList.addBookmark(bookmark1); 0176 bookmarkList.addBookmark(bookmark2); 0177 bookmarkList.addBookmark(bookmark3); 0178 bookmarkList.adjustToReplaced(behindOffset1, replaceLength, replaceLength + longer); 0179 0180 QVERIFY(bookmarkList.first() == bookmark1); 0181 QCOMPARE(bookmarkList.last().offset(), bookmark3.offset() + longer); 0182 QCOMPARE(bookmarkList.size(), 2); 0183 QVERIFY(!bookmarkList.isEmpty()); 0184 0185 // replace after 1 and before 3 with shorter length 0186 constexpr int shorter = 5; 0187 bookmarkList.clear(); 0188 bookmarkList.addBookmark(bookmark1); 0189 bookmarkList.addBookmark(bookmark2); 0190 bookmarkList.addBookmark(bookmark3); 0191 bookmarkList.adjustToReplaced(behindOffset1, replaceLength, replaceLength - shorter); 0192 0193 QVERIFY(bookmarkList.first() == bookmark1); 0194 QCOMPARE(bookmarkList.last().offset(), bookmark3.offset() - shorter); 0195 QCOMPARE(bookmarkList.size(), 2); 0196 QVERIFY(!bookmarkList.isEmpty()); 0197 } 0198 0199 void BookmarkListTest::testAdjustToSwapped() 0200 { 0201 const Bookmark bookmark1(Offset1); 0202 const Bookmark bookmark2(Offset2); 0203 const Bookmark bookmark3_1(Offset3 - 1); 0204 const Bookmark bookmark3(Offset3); 0205 const Bookmark bookmark4(Offset4); 0206 0207 BookmarkList bookmarkList; 0208 0209 // move all between 1 and 3 right before 4 0210 constexpr int secondLength = Distance34; 0211 constexpr int firstLength = Distance13 - 1; 0212 constexpr int behindOffset1 = Offset1 + 1; 0213 bookmarkList.addBookmark(bookmark1); 0214 bookmarkList.addBookmark(bookmark2); 0215 bookmarkList.addBookmark(bookmark3_1); 0216 bookmarkList.addBookmark(bookmark3); 0217 bookmarkList.addBookmark(bookmark4); 0218 bool adjusted = bookmarkList.adjustToSwapped(behindOffset1, Offset3, secondLength); 0219 0220 QVector<int> newOffsets; 0221 newOffsets << bookmark1.offset() << bookmark3.offset() - firstLength << bookmark2.offset() + secondLength 0222 << bookmark3_1.offset() + secondLength << bookmark4.offset(); 0223 0224 QVERIFY(adjusted); 0225 QVERIFY(!bookmarkList.isEmpty()); 0226 QCOMPARE(bookmarkList.size(), 5); 0227 QVector<int>::ConstIterator oit = newOffsets.constBegin(); 0228 for (const Bookmark& bookmark : std::as_const(bookmarkList)) { 0229 QCOMPARE(bookmark.offset(), *oit++); 0230 } 0231 } 0232 0233 QTEST_GUILESS_MAIN(BookmarkListTest) 0234 0235 #include "moc_bookmarklisttest.cpp"