File indexing completed on 2024-05-05 17:58:03

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