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)