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"