File indexing completed on 2024-06-09 04:24:42
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_categories_mapper_test.h" 0008 0009 #include <simpletest.h> 0010 #include "testing_categories_mapper.h" 0011 0012 0013 void checkItemsList(const QList<TestingMapper::DataItem*> &list, 0014 const QStringList &ref) 0015 { 0016 QCOMPARE(list.size(), ref.size()); 0017 0018 for (int i = 0; i < list.size(); i++) { 0019 QCOMPARE(list[i]->name(), ref[i]); 0020 } 0021 } 0022 0023 void checkFetching(TestingMapper &mapper, 0024 const QStringList &catsRef, 0025 const QStringList &entsRef) 0026 { 0027 Q_ASSERT(entsRef.isEmpty() || catsRef.size() == entsRef.size()); 0028 0029 for (int i = 0; i < catsRef.size(); i++) { 0030 if (entsRef.isEmpty() || entsRef[i].isNull()) { 0031 QVERIFY(mapper.fetchCategory(catsRef[i])); 0032 } else { 0033 QVERIFY(mapper.fetchEntry(catsRef[i], entsRef[i])); 0034 } 0035 } 0036 } 0037 0038 void KisCategoriesMapperTest::testAddRemoveCategories() 0039 { 0040 TestingMapper mapper; 0041 QStringList categories; 0042 categories << "cat1"; 0043 categories << "cat2"; 0044 categories << "cat3"; 0045 categories << "cat4"; 0046 0047 Q_FOREACH (const QString &cat, categories) { 0048 mapper.addCategory(cat); 0049 mapper.checkInsertedCorrectly(); 0050 } 0051 0052 checkItemsList(mapper.testingGetItems(), categories); 0053 checkFetching(mapper, categories, QStringList()); 0054 0055 Q_FOREACH (const QString &cat, categories) { 0056 mapper.removeCategory(cat); 0057 mapper.checkRemovedCorrectly(); 0058 0059 categories.removeOne(cat); 0060 checkItemsList(mapper.testingGetItems(), categories); 0061 checkFetching(mapper, categories, QStringList()); 0062 } 0063 } 0064 0065 void fillLists(QStringList &categories, QStringList &entries, QStringList &items) 0066 { 0067 categories << "cat1"; 0068 categories << "cat1"; 0069 categories << "cat1"; 0070 categories << "cat2"; 0071 categories << "cat2"; 0072 categories << "cat3"; 0073 categories << "cat4"; 0074 0075 entries << "ent1"; 0076 entries << "ent2"; 0077 entries << "ent3"; 0078 entries << "ent4"; 0079 entries << "ent5"; 0080 entries << "ent6"; 0081 entries << "ent7"; 0082 0083 items << "cat1"; 0084 items << "ent1"; 0085 items << "ent2"; 0086 items << "ent3"; 0087 items << "cat2"; 0088 items << "ent4"; 0089 items << "ent5"; 0090 items << "cat3"; 0091 items << "ent6"; 0092 items << "cat4"; 0093 items << "ent7"; 0094 } 0095 0096 void initializeEntries(TestingMapper &mapper, QStringList &categories, QStringList &entries, QStringList &items) 0097 { 0098 fillLists(categories, entries, items); 0099 0100 for (int i = 0; i < entries.size(); i++) { 0101 bool hasCategory = mapper.fetchCategory(categories[i]); 0102 mapper.addEntry(categories[i], entries[i]); 0103 mapper.checkInsertedCorrectly(1 + !hasCategory); 0104 } 0105 0106 checkItemsList(mapper.testingGetItems(), items); 0107 checkFetching(mapper, categories, entries); 0108 } 0109 0110 void KisCategoriesMapperTest::testAddRemoveEntries() 0111 { 0112 TestingMapper mapper; 0113 QStringList categories; 0114 QStringList entries; 0115 QStringList items; 0116 0117 initializeEntries(mapper, categories, entries, items); 0118 0119 for (int i = 0, size = entries.size(); i < size; i++) { 0120 QString cat = categories.takeFirst(); 0121 QString ent = entries.takeFirst(); 0122 0123 mapper.removeEntry(cat, ent); 0124 mapper.checkRemovedCorrectly(); 0125 0126 items.removeOne(ent); 0127 checkItemsList(mapper.testingGetItems(), items); 0128 checkFetching(mapper, categories, entries); 0129 } 0130 } 0131 0132 void removeCategory(const QString &category, QStringList &categories, QStringList &entries, QStringList &items) 0133 { 0134 QMutableStringListIterator catIt(categories); 0135 QMutableStringListIterator entIt(entries); 0136 0137 while(catIt.hasNext() && entIt.hasNext()) { 0138 QString cat = catIt.next(); 0139 QString ent = entIt.next(); 0140 0141 if (cat == category) { 0142 catIt.remove(); 0143 entIt.remove(); 0144 } 0145 } 0146 0147 bool started = false; 0148 QMutableStringListIterator itemsIt(items); 0149 while(itemsIt.hasNext()) { 0150 QString item = itemsIt.next(); 0151 0152 if (started && item.startsWith("cat")) break; 0153 0154 if (started || item == category) { 0155 itemsIt.remove(); 0156 started = true; 0157 } 0158 } 0159 } 0160 0161 void KisCategoriesMapperTest::testRemoveNonEmptyCategories() 0162 { 0163 TestingMapper mapper; 0164 QStringList categories; 0165 QStringList entries; 0166 QStringList items; 0167 0168 initializeEntries(mapper, categories, entries, items); 0169 0170 removeCategory("cat2", categories, entries, items); 0171 mapper.removeCategory("cat2"); 0172 mapper.checkRemovedCorrectly(3); 0173 checkItemsList(mapper.testingGetItems(), items); 0174 checkFetching(mapper, categories, entries); 0175 0176 removeCategory("cat1", categories, entries, items); 0177 mapper.removeCategory("cat1"); 0178 mapper.checkRemovedCorrectly(4); 0179 checkItemsList(mapper.testingGetItems(), items); 0180 checkFetching(mapper, categories, entries); 0181 0182 removeCategory("cat3", categories, entries, items); 0183 mapper.removeCategory("cat3"); 0184 mapper.checkRemovedCorrectly(2); 0185 checkItemsList(mapper.testingGetItems(), items); 0186 checkFetching(mapper, categories, entries); 0187 0188 removeCategory("cat4", categories, entries, items); 0189 mapper.removeCategory("cat4"); 0190 mapper.checkRemovedCorrectly(2); 0191 checkItemsList(mapper.testingGetItems(), items); 0192 checkFetching(mapper, categories, entries); 0193 } 0194 0195 void KisCategoriesMapperTest::testChangingItem() 0196 { 0197 TestingMapper mapper; 0198 QStringList categories; 0199 QStringList entries; 0200 QStringList items; 0201 0202 initializeEntries(mapper, categories, entries, items); 0203 0204 TestingMapper::DataItem *item = mapper.fetchEntry("cat1", "ent2"); 0205 0206 item->setEnabled(false); 0207 mapper.checkRowChangedIndices(QVector<int>() << 2); 0208 0209 item->setCheckable(false); 0210 mapper.checkRowChangedIndices(QVector<int>() << 2); 0211 0212 item->setChecked(false); 0213 mapper.checkRowChangedIndices(QVector<int>() << 2); 0214 0215 mapper.fetchEntry("cat1", "ent3")->setEnabled(false); 0216 mapper.checkRowChangedIndices(QVector<int>() << 3); 0217 0218 mapper.fetchCategory("cat1")->setExpanded(false); 0219 mapper.checkRowChangedIndices(QVector<int>() << 0 << 1 << 2 << 3); 0220 } 0221 0222 SIMPLE_TEST_MAIN(KisCategoriesMapperTest)