File indexing completed on 2024-04-28 05:45:19

0001 /*
0002  * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kitemviews/kfileitemlistview.h"
0008 #include "kitemviews/kfileitemmodel.h"
0009 #include "testdir.h"
0010 
0011 #include <KDirLister>
0012 
0013 #include <QGraphicsView>
0014 #include <QSignalSpy>
0015 #include <QStandardPaths>
0016 #include <QTest>
0017 
0018 class KFileItemListViewTest : public QObject
0019 {
0020     Q_OBJECT
0021 
0022 private Q_SLOTS:
0023     void initTestCase();
0024     void init();
0025     void cleanup();
0026     void testGroupedItemChanges();
0027 
0028 private:
0029     KFileItemListView *m_listView;
0030     KFileItemModel *m_model;
0031     TestDir *m_testDir;
0032     QGraphicsView *m_graphicsView;
0033 };
0034 
0035 void KFileItemListViewTest::initTestCase()
0036 {
0037     QStandardPaths::setTestModeEnabled(true);
0038 }
0039 
0040 void KFileItemListViewTest::init()
0041 {
0042     qRegisterMetaType<KItemRangeList>("KItemRangeList");
0043     qRegisterMetaType<KFileItemList>("KFileItemList");
0044 
0045     m_testDir = new TestDir();
0046     m_model = new KFileItemModel();
0047     m_model->m_dirLister->setAutoUpdate(false);
0048 
0049     m_listView = new KFileItemListView();
0050     m_listView->onModelChanged(m_model, nullptr);
0051 
0052     m_graphicsView = new QGraphicsView();
0053     m_graphicsView->show();
0054     QVERIFY(QTest::qWaitForWindowExposed(m_graphicsView));
0055 }
0056 
0057 void KFileItemListViewTest::cleanup()
0058 {
0059     delete m_graphicsView;
0060     m_graphicsView = nullptr;
0061 
0062     delete m_listView;
0063     m_listView = nullptr;
0064 
0065     delete m_model;
0066     m_model = nullptr;
0067 
0068     delete m_testDir;
0069     m_testDir = nullptr;
0070 }
0071 
0072 /**
0073  * If grouping is enabled, the group headers must be updated
0074  * when items have been inserted or removed. This updating
0075  * may only be done after all multiple ranges have been inserted
0076  * or removed and not after each individual range (see description
0077  * in #ifndef QT_NO_DEBUG-block of KItemListView::slotItemsInserted()
0078  * and KItemListView::slotItemsRemoved()). This test inserts and
0079  * removes multiple ranges and will trigger the Q_ASSERT in the
0080  * ifndef QT_NO_DEBUG-block in case if a group-header will be updated
0081  * too early.
0082  */
0083 void KFileItemListViewTest::testGroupedItemChanges()
0084 {
0085     QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted);
0086     QVERIFY(itemsInsertedSpy.isValid());
0087     QSignalSpy itemsRemovedSpy(m_model, &KFileItemModel::itemsRemoved);
0088     QVERIFY(itemsRemovedSpy.isValid());
0089 
0090     m_model->setGroupedSorting(true);
0091 
0092     m_testDir->createFiles({"1", "3", "5"});
0093     m_model->loadDirectory(m_testDir->url());
0094     QVERIFY(itemsInsertedSpy.wait());
0095     QCOMPARE(m_model->count(), 3);
0096 
0097     m_testDir->createFiles({"2", "4"});
0098     m_model->m_dirLister->updateDirectory(m_testDir->url());
0099     QVERIFY(itemsInsertedSpy.wait());
0100     QCOMPARE(m_model->count(), 5);
0101 
0102     m_testDir->removeFiles({"1", "3", "5"});
0103     m_model->m_dirLister->updateDirectory(m_testDir->url());
0104     QVERIFY(itemsRemovedSpy.wait());
0105     QCOMPARE(m_model->count(), 2);
0106 }
0107 
0108 QTEST_MAIN(KFileItemListViewTest)
0109 
0110 #include "kfileitemlistviewtest.moc"