]> cloud.milkyroute.net Git - dolphin.git/blob - src/tests/kfileitemlistviewtest.cpp
Build with QT_NO_KEYWORDS
[dolphin.git] / src / tests / kfileitemlistviewtest.cpp
1 /*
2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "kitemviews/kfileitemlistview.h"
8 #include "kitemviews/kfileitemmodel.h"
9 #include "kitemviews/private/kfileitemmodeldirlister.h"
10 #include "testdir.h"
11
12 #include <QGraphicsView>
13 #include <QTest>
14 #include <QSignalSpy>
15
16 class KFileItemListViewTest : public QObject
17 {
18 Q_OBJECT
19
20 private Q_SLOTS:
21 void init();
22 void cleanup();
23 void testGroupedItemChanges();
24
25 private:
26 KFileItemListView* m_listView;
27 KFileItemModel* m_model;
28 TestDir* m_testDir;
29 QGraphicsView* m_graphicsView;
30 };
31
32 void KFileItemListViewTest::init()
33 {
34 qRegisterMetaType<KItemRangeList>("KItemRangeList");
35 qRegisterMetaType<KFileItemList>("KFileItemList");
36
37 m_testDir = new TestDir();
38 m_model = new KFileItemModel();
39 m_model->m_dirLister->setAutoUpdate(false);
40
41 m_listView = new KFileItemListView();
42 m_listView->onModelChanged(m_model, nullptr);
43
44 m_graphicsView = new QGraphicsView();
45 m_graphicsView->show();
46 QVERIFY(QTest::qWaitForWindowExposed(m_graphicsView));
47 }
48
49 void KFileItemListViewTest::cleanup()
50 {
51 delete m_graphicsView;
52 m_graphicsView = nullptr;
53
54 delete m_listView;
55 m_listView = nullptr;
56
57 delete m_model;
58 m_model = nullptr;
59
60 delete m_testDir;
61 m_testDir = nullptr;
62 }
63
64 /**
65 * If grouping is enabled, the group headers must be updated
66 * when items have been inserted or removed. This updating
67 * may only be done after all multiple ranges have been inserted
68 * or removed and not after each individual range (see description
69 * in #ifndef QT_NO_DEBUG-block of KItemListView::slotItemsInserted()
70 * and KItemListView::slotItemsRemoved()). This test inserts and
71 * removes multiple ranges and will trigger the Q_ASSERT in the
72 * ifndef QT_NO_DEBUG-block in case if a group-header will be updated
73 * too early.
74 */
75 void KFileItemListViewTest::testGroupedItemChanges()
76 {
77 QSignalSpy itemsInsertedSpy(m_model, &KFileItemModel::itemsInserted);
78 QVERIFY(itemsInsertedSpy.isValid());
79 QSignalSpy itemsRemovedSpy(m_model, &KFileItemModel::itemsRemoved);
80 QVERIFY(itemsRemovedSpy.isValid());
81
82 m_model->setGroupedSorting(true);
83
84 m_testDir->createFiles({"1", "3", "5"});
85 m_model->loadDirectory(m_testDir->url());
86 QVERIFY(itemsInsertedSpy.wait());
87 QCOMPARE(m_model->count(), 3);
88
89 m_testDir->createFiles({"2", "4"});
90 m_model->m_dirLister->updateDirectory(m_testDir->url());
91 QVERIFY(itemsInsertedSpy.wait());
92 QCOMPARE(m_model->count(), 5);
93
94 m_testDir->removeFiles({"1", "3", "5"});
95 m_model->m_dirLister->updateDirectory(m_testDir->url());
96 QVERIFY(itemsRemovedSpy.wait());
97 QCOMPARE(m_model->count(), 2);
98 }
99
100 QTEST_MAIN(KFileItemListViewTest)
101
102 #include "kfileitemlistviewtest.moc"