]> cloud.milkyroute.net Git - dolphin.git/blob - src/tests/kitemlistcontrollerexpandtest.cpp
GIT_SILENT Sync po/docbooks with svn
[dolphin.git] / src / tests / kitemlistcontrollerexpandtest.cpp
1 /*
2 * SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org>
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/kitemlistcontainer.h"
10 #include "kitemviews/kitemlistcontroller.h"
11 #include "kitemviews/kitemlistselectionmanager.h"
12 #include "testdir.h"
13
14 #include <QSignalSpy>
15 #include <QStandardPaths>
16 #include <QTest>
17
18 class KItemListControllerExpandTest : public QObject
19 {
20 Q_OBJECT
21
22 private Q_SLOTS:
23 void initTestCase();
24 void cleanupTestCase();
25
26 void init();
27 void cleanup();
28
29 void testDirExpand();
30
31 private:
32 KFileItemListView *m_view;
33 KItemListController *m_controller;
34 KItemListSelectionManager *m_selectionManager;
35 KFileItemModel *m_model;
36 TestDir *m_testDir;
37 KItemListContainer *m_container;
38 QSignalSpy *m_spyDirectoryLoadingCompleted;
39 };
40
41 void KItemListControllerExpandTest::initTestCase()
42 {
43 QStandardPaths::setTestModeEnabled(true);
44 qRegisterMetaType<KItemSet>("KItemSet");
45
46 m_testDir = new TestDir();
47 m_model = new KFileItemModel();
48 m_view = new KFileItemListView();
49 m_controller = new KItemListController(m_model, m_view, this);
50 m_container = new KItemListContainer(m_controller);
51 #ifndef QT_NO_ACCESSIBILITY
52 m_view->setAccessibleParentsObject(m_container);
53 #endif
54 m_controller = m_container->controller();
55 m_controller->setSelectionBehavior(KItemListController::MultiSelection);
56 m_selectionManager = m_controller->selectionManager();
57
58 QStringList files;
59 files << "dir1/file1";
60 files << "dir1/file2";
61 files << "dir1/file3";
62 files << "dir1/file4";
63 files << "dir1/file5";
64
65 files << "dir2/file1";
66 files << "dir2/file2";
67 files << "dir2/file3";
68 files << "dir2/file4";
69 files << "dir2/file5";
70
71 files << "dir3/file1";
72 files << "dir3/file2";
73 files << "dir3/file3";
74 files << "dir3/file4";
75 files << "dir3/file5";
76
77 m_testDir->createFiles(files);
78 m_model->loadDirectory(m_testDir->url());
79 m_spyDirectoryLoadingCompleted = new QSignalSpy(m_model, &KFileItemModel::directoryLoadingCompleted);
80 QVERIFY(m_spyDirectoryLoadingCompleted->wait());
81
82 m_container->show();
83 QVERIFY(QTest::qWaitForWindowExposed(m_container));
84 }
85 void KItemListControllerExpandTest::cleanupTestCase()
86 {
87 delete m_container;
88 m_container = nullptr;
89
90 delete m_testDir;
91 m_testDir = nullptr;
92 }
93
94 void KItemListControllerExpandTest::init()
95 {
96 m_selectionManager->setCurrentItem(0);
97 QCOMPARE(m_selectionManager->currentItem(), 0);
98
99 m_selectionManager->clearSelection();
100 QVERIFY(!m_selectionManager->hasSelection());
101 }
102
103 void KItemListControllerExpandTest::cleanup()
104 {
105 }
106
107 void KItemListControllerExpandTest::testDirExpand()
108 {
109 m_view->setItemLayout(KFileItemListView::DetailsLayout);
110 QCOMPARE(m_view->itemLayout(), KFileItemListView::DetailsLayout);
111 m_view->setSupportsItemExpanding(true);
112
113 // intial state
114 QCOMPARE(m_spyDirectoryLoadingCompleted->count(), 1);
115 QCOMPARE(m_model->count(), 3);
116 QCOMPARE(m_selectionManager->currentItem(), 0);
117 QCOMPARE(m_selectionManager->selectedItems().count(), 0);
118
119 // extend first folder
120 QTest::keyClick(m_container, Qt::Key_Right);
121 QVERIFY(m_spyDirectoryLoadingCompleted->wait());
122 QCOMPARE(m_model->count(), 8);
123 QCOMPARE(m_selectionManager->currentItem(), 0);
124 QCOMPARE(m_selectionManager->selectedItems().count(), 0);
125
126 // collapse folder
127 QTest::keyClick(m_container, Qt::Key_Left);
128
129 QCOMPARE(m_model->count(), 3);
130 QCOMPARE(m_selectionManager->currentItem(), 0);
131 QCOMPARE(m_selectionManager->selectedItems().count(), 0);
132
133 // make the first folder selected
134 QTest::keyClick(m_container, Qt::Key_Down);
135 QCOMPARE(m_model->count(), 3);
136 QCOMPARE(m_selectionManager->currentItem(), 1);
137 QCOMPARE(m_selectionManager->selectedItems().count(), 1);
138
139 QTest::keyClick(m_container, Qt::Key_Up);
140 QCOMPARE(m_model->count(), 3);
141 QCOMPARE(m_selectionManager->currentItem(), 0);
142 QCOMPARE(m_selectionManager->selectedItems().count(), 1);
143
144 // expand the two first folders
145 QTest::keyClick(m_container, Qt::Key_Down, Qt::ShiftModifier);
146 QCOMPARE(m_model->count(), 3);
147 QCOMPARE(m_selectionManager->currentItem(), 1);
148 QCOMPARE(m_selectionManager->selectedItems().count(), 2);
149
150 // precondition
151 QCOMPARE(m_spyDirectoryLoadingCompleted->count(), 2);
152
153 // expand selected folders
154 QTest::keyClick(m_container, Qt::Key_Right);
155 QVERIFY(QTest::qWaitFor(
156 [this]() {
157 return m_spyDirectoryLoadingCompleted->count() == 3;
158 },
159 100));
160 QCOMPARE(m_model->count(), 8);
161 QCOMPARE(m_selectionManager->currentItem(), 6);
162 QCOMPARE(m_selectionManager->selectedItems().count(), 2);
163
164 // collapse the folders
165 QTest::keyClick(m_container, Qt::Key_Left);
166 QCOMPARE(m_model->count(), 3);
167 QCOMPARE(m_selectionManager->currentItem(), 1);
168 QCOMPARE(m_selectionManager->selectedItems().count(), 2);
169
170 // select third folder
171 QTest::keyClick(m_container, Qt::Key_Down, Qt::ShiftModifier);
172 QCOMPARE(m_model->count(), 3);
173 QCOMPARE(m_selectionManager->currentItem(), 2);
174 QCOMPARE(m_selectionManager->selectedItems().count(), 3);
175
176 // precondition
177 QCOMPARE(m_spyDirectoryLoadingCompleted->count(), 3);
178
179 // expand the three folders
180 QTest::keyClick(m_container, Qt::Key_Right);
181
182 QVERIFY(QTest::qWaitFor(
183 [this]() {
184 return m_spyDirectoryLoadingCompleted->count() == 6;
185 },
186 300));
187
188 QCOMPARE(m_model->count(), 18);
189 QCOMPARE(m_selectionManager->currentItem(), 12);
190 QCOMPARE(m_selectionManager->selectedItems().count(), 3);
191
192 // collapse the folders
193 QTest::keyClick(m_container, Qt::Key_Left);
194 QCOMPARE(m_model->count(), 3);
195 QCOMPARE(m_selectionManager->currentItem(), 2);
196 QCOMPARE(m_selectionManager->selectedItems().count(), 3);
197
198 // shift select the directories
199 QTest::keyClick(m_container, Qt::Key_Up);
200 QCOMPARE(m_model->count(), 3);
201 QCOMPARE(m_selectionManager->currentItem(), 1);
202 QCOMPARE(m_selectionManager->selectedItems().count(), 1);
203
204 QTest::keyClick(m_container, Qt::Key_Up);
205 QCOMPARE(m_model->count(), 3);
206 QCOMPARE(m_selectionManager->currentItem(), 0);
207 QCOMPARE(m_selectionManager->selectedItems().count(), 1);
208
209 QTest::keyClick(m_container, Qt::Key_Down, Qt::ShiftModifier);
210 QTest::keyClick(m_container, Qt::Key_Down, Qt::ShiftModifier);
211
212 QCOMPARE(m_model->count(), 3);
213 QCOMPARE(m_selectionManager->currentItem(), 2);
214 QCOMPARE(m_selectionManager->selectedItems().count(), 3);
215
216 // expand the three folders with shift modifier
217 QTest::keyClick(m_container, Qt::Key_Right, Qt::ShiftModifier);
218
219 QVERIFY(QTest::qWaitFor(
220 [this]() {
221 return m_spyDirectoryLoadingCompleted->count() == 9;
222 },
223 100));
224
225 QCOMPARE(m_model->count(), 18);
226 QCOMPARE(m_selectionManager->currentItem(), 12);
227 QCOMPARE(m_selectionManager->selectedItems().count(), 13);
228
229 // collapse the folders
230 QTest::keyClick(m_container, Qt::Key_Left);
231 QCOMPARE(m_model->count(), 3);
232 QCOMPARE(m_selectionManager->currentItem(), 2);
233 QCOMPARE(m_selectionManager->selectedItems().count(), 3);
234 }
235
236 QTEST_MAIN(KItemListControllerExpandTest)
237
238 #include "kitemlistcontrollerexpandtest.moc"