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