Changeset View
Changeset View
Standalone View
Standalone View
containments/desktop/plugins/folder/autotests/foldermodeltest.cpp
Show All 15 Lines | |||||
16 | * You should have received a copy of the GNU General Public License * | 16 | * You should have received a copy of the GNU General Public License * | ||
17 | * along with this program; if not, write to the * | 17 | * along with this program; if not, write to the * | ||
18 | * Free Software Foundation, Inc., * | 18 | * Free Software Foundation, Inc., * | ||
19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * | 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * | ||
20 | ***************************************************************************/ | 20 | ***************************************************************************/ | ||
21 | 21 | | |||
22 | #include "foldermodeltest.h" | 22 | #include "foldermodeltest.h" | ||
23 | #include "foldermodel.h" | 23 | #include "foldermodel.h" | ||
24 | #include "screenmapper.h" | ||||
24 | 25 | | |||
25 | #include <QTest> | 26 | #include <QTest> | ||
26 | #include <QTemporaryDir> | 27 | #include <QTemporaryDir> | ||
27 | #include <QSignalSpy> | 28 | #include <QSignalSpy> | ||
28 | 29 | | |||
29 | QTEST_MAIN(FolderModelTest) | 30 | QTEST_MAIN(FolderModelTest) | ||
30 | 31 | | |||
31 | static const QLatin1String desktop(QLatin1String("Desktop")); | 32 | static const QLatin1String desktop(QLatin1String("Desktop")); | ||
32 | 33 | | |||
33 | void FolderModelTest::initTestCase() | 34 | void FolderModelTest::createTestFolder(const QString &path) | ||
34 | { | 35 | { | ||
35 | m_folderDir = new QTemporaryDir(); | | |||
36 | | ||||
37 | QDir dir(m_folderDir->path()); | 36 | QDir dir(m_folderDir->path()); | ||
38 | dir.mkdir(desktop); | 37 | dir.mkdir(path); | ||
39 | dir.cd(desktop); | 38 | dir.cd(path); | ||
40 | dir.mkdir("firstDir"); | 39 | dir.mkdir("firstDir"); | ||
41 | QFile f; | 40 | QFile f; | ||
42 | for (int i = 1; i < 10; i++) { | 41 | for (int i = 1; i < 10; i++) { | ||
43 | f.setFileName(QStringLiteral("%1/file%2.txt").arg(dir.path(), QString::number(i))); | 42 | f.setFileName(QStringLiteral("%1/file%2.txt").arg(dir.path(), QString::number(i))); | ||
44 | f.open(QFile::WriteOnly); | 43 | f.open(QFile::WriteOnly); | ||
45 | f.close(); | 44 | f.close(); | ||
46 | } | 45 | } | ||
47 | | ||||
48 | } | | |||
49 | | ||||
50 | void FolderModelTest::cleanupTestCase() | | |||
51 | { | | |||
52 | delete m_folderDir; | | |||
53 | } | 46 | } | ||
54 | 47 | | |||
mwolff: remove the init and cleanup if both are empty? | |||||
55 | void FolderModelTest::init() | 48 | void FolderModelTest::init() | ||
56 | { | 49 | { | ||
50 | m_folderDir = new QTemporaryDir(); | ||||
51 | createTestFolder(desktop); | ||||
57 | m_folderModel = new FolderModel(this); | 52 | m_folderModel = new FolderModel(this); | ||
58 | m_folderModel->setUrl(m_folderDir->path() + QDir::separator() + desktop ); | 53 | m_folderModel->setUrl(m_folderDir->path() + QDir::separator() + desktop ); | ||
59 | QSignalSpy s(m_folderModel, &FolderModel::listingCompleted); | 54 | QSignalSpy s(m_folderModel, &FolderModel::listingCompleted); | ||
60 | s.wait(1000); | 55 | s.wait(1000); | ||
61 | } | 56 | } | ||
62 | 57 | | |||
63 | void FolderModelTest::cleanup() | 58 | void FolderModelTest::cleanup() | ||
64 | { | 59 | { | ||
60 | delete m_folderDir; | ||||
61 | m_folderDir = 0; | ||||
mlaurent: m_folderDir = nullptr | |||||
65 | delete m_folderModel; | 62 | delete m_folderModel; | ||
66 | m_folderModel = nullptr; | 63 | m_folderModel = nullptr; | ||
67 | } | 64 | } | ||
68 | 65 | | |||
69 | void FolderModelTest::tst_listing() | 66 | void FolderModelTest::tst_listing() | ||
70 | { | 67 | { | ||
71 | 68 | | |||
72 | QCOMPARE(m_folderModel->url(), m_folderDir->path() + QDir::separator() + desktop); | 69 | QCOMPARE(m_folderModel->url(), m_folderDir->path() + QDir::separator() + desktop); | ||
▲ Show 20 Lines • Show All 187 Lines • ▼ Show 20 Line(s) | 256 | { | |||
260 | QSignalSpy s(m_folderModel, &FolderModel::lockedChanged); | 257 | QSignalSpy s(m_folderModel, &FolderModel::lockedChanged); | ||
261 | m_folderModel->setLocked(false); | 258 | m_folderModel->setLocked(false); | ||
262 | QCOMPARE(s.count(), 1); | 259 | QCOMPARE(s.count(), 1); | ||
263 | m_folderModel->setLocked(false); | 260 | m_folderModel->setLocked(false); | ||
264 | QCOMPARE(s.count(), 1); | 261 | QCOMPARE(s.count(), 1); | ||
265 | m_folderModel->setLocked(true); | 262 | m_folderModel->setLocked(true); | ||
266 | QCOMPARE(s.count(), 2); | 263 | QCOMPARE(s.count(), 2); | ||
267 | } | 264 | } | ||
265 | | ||||
266 | void FolderModelTest::tst_multiScreen() | ||||
267 | { | ||||
268 | auto *screenMapper = ScreenMapper::instance(); | ||||
269 | m_folderModel->setUsedByContainment(true); | ||||
270 | m_folderModel->setScreenMapper(screenMapper); | ||||
271 | m_folderModel->setScreen(0); | ||||
272 | QSignalSpy s(m_folderModel, &FolderModel::listingCompleted); | ||||
273 | s.wait(1000); | ||||
274 | const auto count = m_folderModel->rowCount(); | ||||
275 | for (int i = 0; i < count; i++) { | ||||
276 | const auto index = m_folderModel->index(i, 0); | ||||
277 | const auto name = index.data(FolderModel::UrlRole).toString(); | ||||
278 | // all items are on the first screen by default | ||||
279 | QCOMPARE(screenMapper->screenForItem(name), 0); | ||||
280 | } | ||||
281 | | ||||
282 | // move one file to a new screen | ||||
283 | const auto movedItem = m_folderModel->index(0, 0).data(FolderModel::UrlRole).toString(); | ||||
284 | FolderModel secondFolderModel; | ||||
285 | secondFolderModel.setUrl(m_folderDir->path() + QDir::separator() + desktop ); | ||||
mlaurent: remove extra space before + | |||||
286 | secondFolderModel.setUsedByContainment(true); | ||||
287 | secondFolderModel.setScreenMapper(screenMapper); | ||||
288 | secondFolderModel.setScreen(1); | ||||
289 | QSignalSpy s2(&secondFolderModel, &FolderModel::listingCompleted); | ||||
290 | s2.wait(1000); | ||||
291 | const auto count2 = secondFolderModel.rowCount(); | ||||
292 | QCOMPARE(count2, 0); | ||||
293 | | ||||
294 | screenMapper->addMapping(movedItem, 1); | ||||
295 | m_folderModel->invalidate(); | ||||
296 | secondFolderModel.invalidate(); | ||||
297 | s.wait(1000); | ||||
298 | s2.wait(1000); | ||||
299 | // we have one less item | ||||
300 | QCOMPARE(m_folderModel->rowCount(), count - 1); | ||||
301 | QCOMPARE(secondFolderModel.rowCount(), 1); | ||||
302 | QCOMPARE(secondFolderModel.index(0,0).data(FolderModel::UrlRole).toString(), movedItem); | ||||
303 | QCOMPARE(screenMapper->screenForItem(movedItem), 1); | ||||
304 | | ||||
305 | // remove extra screen, we have all items back | ||||
306 | screenMapper->removeScreen(1, m_folderModel->url()); | ||||
307 | s.wait(500); | ||||
308 | QCOMPARE(m_folderModel->rowCount(), count); | ||||
309 | QCOMPARE(secondFolderModel.rowCount(), 0); | ||||
310 | QCOMPARE(screenMapper->screenForItem(movedItem), 0); | ||||
311 | | ||||
312 | // add back extra screen, the item is moved there | ||||
313 | screenMapper->addScreen(1, m_folderModel->url()); | ||||
314 | s.wait(500); | ||||
315 | s2.wait(500); | ||||
316 | QCOMPARE(m_folderModel->rowCount(), count - 1); | ||||
317 | QCOMPARE(secondFolderModel.rowCount(), 1); | ||||
318 | QCOMPARE(secondFolderModel.index(0,0).data(FolderModel::UrlRole).toString(), movedItem); | ||||
319 | QCOMPARE(screenMapper->screenForItem(movedItem), 1); | ||||
320 | | ||||
321 | // create a new item, it appears on the first screen | ||||
322 | QDir dir(m_folderDir->path()); | ||||
323 | dir.cd(desktop); | ||||
324 | dir.mkdir("secondDir"); | ||||
325 | dir.cd("secondDir"); | ||||
326 | s.wait(1000); | ||||
327 | QCOMPARE(m_folderModel->rowCount(), count); | ||||
328 | QCOMPARE(secondFolderModel.rowCount(), 1); | ||||
329 | QCOMPARE(screenMapper->screenForItem("file://" + dir.path()), 0); | ||||
330 | } | ||||
331 | | ||||
332 | void FolderModelTest::tst_multiScreenDifferenPath() | ||||
333 | { | ||||
334 | auto *screenMapper = ScreenMapper::instance(); | ||||
335 | m_folderModel->setUsedByContainment(true); | ||||
336 | m_folderModel->setScreenMapper(screenMapper); | ||||
337 | m_folderModel->setScreen(0); | ||||
338 | QSignalSpy s(m_folderModel, &FolderModel::listingCompleted); | ||||
339 | s.wait(1000); | ||||
340 | const auto count = m_folderModel->rowCount(); | ||||
341 | QCOMPARE(count, 10); | ||||
342 | | ||||
343 | const QLatin1String desktop2(QLatin1String("Desktop2")); | ||||
344 | createTestFolder(desktop2); | ||||
345 | FolderModel secondFolderModel; | ||||
346 | secondFolderModel.setUsedByContainment(true); | ||||
347 | secondFolderModel.setScreenMapper(screenMapper); | ||||
348 | secondFolderModel.setUrl(m_folderDir->path() + QDir::separator() + desktop2 ); | ||||
349 | secondFolderModel.setScreen(1); | ||||
350 | QSignalSpy s2(&secondFolderModel, &FolderModel::listingCompleted); | ||||
351 | s2.wait(1000); | ||||
352 | const auto count2 = secondFolderModel.rowCount(); | ||||
353 | QCOMPARE(count2, 10); | ||||
354 | | ||||
355 | // create a new item, it appears on the first screen | ||||
356 | QDir dir(m_folderDir->path()); | ||||
357 | dir.cd(desktop); | ||||
358 | dir.mkdir("secondDir"); | ||||
359 | s.wait(1000); | ||||
360 | QCOMPARE(m_folderModel->rowCount(), count + 1); | ||||
361 | QCOMPARE(secondFolderModel.rowCount(), count2); | ||||
362 | | ||||
363 | | ||||
364 | // create a new item, it appears on the second screen | ||||
365 | dir.cd(m_folderDir->path() + QDir::separator() + desktop2); | ||||
366 | dir.mkdir("secondDir2"); | ||||
367 | s.wait(1000); | ||||
368 | QCOMPARE(m_folderModel->rowCount(), count + 1); | ||||
369 | QCOMPARE(secondFolderModel.rowCount(), count2 + 1); | ||||
370 | } | ||||
371 | |
remove the init and cleanup if both are empty?