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"