+ // Setup watcher for config file changes
+ const QString configFileName = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/" + KConfigGui::sessionConfig()->name();
+ QFileSystemWatcher *configWatcher = new QFileSystemWatcher({configFileName}, this);
+ QSignalSpy spySessionSaved(configWatcher, &QFileSystemWatcher::fileChanged);
+
+ // Enable session autosave.
+ m_mainWindow->setSessionAutoSaveEnabled(true);
+ m_mainWindow->m_sessionSaveTimer->setInterval(200); // Lower the interval to speed up the testing
+
+ // Open a new tab
+ auto tabWidget = m_mainWindow->findChild<DolphinTabWidget *>("tabWidget");
+ QVERIFY(tabWidget);
+ tabWidget->openNewActivatedTab(QUrl::fromLocalFile(QDir::tempPath()));
+ QCOMPARE(tabWidget->count(), 2);
+
+ // Wait till a session save occurs
+ QVERIFY(spySessionSaved.wait(60000));
+
+ // Disable session autosave.
+ m_mainWindow->setSessionAutoSaveEnabled(false);
+}
+
+void DolphinMainWindowTest::testInlineRename()
+{
+ QScopedPointer<TestDir> testDir{new TestDir()};
+ testDir->createFiles({"aaaa", "bbbb", "cccc", "dddd"});
+ m_mainWindow->openDirectories({testDir->url()}, false);
+ m_mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
+ QVERIFY(m_mainWindow->isVisible());
+
+ DolphinView *view = m_mainWindow->activeViewContainer()->view();
+ QSignalSpy viewDirectoryLoadingCompletedSpy(view, &DolphinView::directoryLoadingCompleted);
+ QSignalSpy itemsReorderedSpy(view->m_model, &KFileItemModel::itemsMoved);
+ QSignalSpy modelDirectoryLoadingCompletedSpy(view->m_model, &KFileItemModel::directoryLoadingCompleted);
+
+ QVERIFY(viewDirectoryLoadingCompletedSpy.wait());
+ QTest::qWait(500); // we need to wait for the file widgets to become visible
+ view->markUrlsAsSelected({QUrl(testDir->url().toString() + "/aaaa")});
+ view->updateViewState();
+ view->renameSelectedItems();
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Left);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_E);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Down);
+
+ QVERIFY(itemsReorderedSpy.wait());
+ QVERIFY(view->m_view->m_editingRole);
+ KItemListWidget *widget = view->m_view->m_visibleItems.value(view->m_view->firstVisibleIndex());
+ QVERIFY(!widget->editedRole().isEmpty());
+
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Left);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_A);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Down);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Down);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Left);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_A);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Down);
+
+ QVERIFY(itemsReorderedSpy.wait());
+ QVERIFY(view->m_view->m_editingRole);
+ widget = view->m_view->m_visibleItems.value(view->m_view->lastVisibleIndex());
+ QVERIFY(!widget->editedRole().isEmpty());
+
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Escape);
+ QVERIFY(widget->isCurrent());
+ view->m_model->refreshDirectory(testDir->url());
+ QVERIFY(modelDirectoryLoadingCompletedSpy.wait());
+
+ QCOMPARE(view->m_model->fileItem(0).name(), "abbbb");
+ QCOMPARE(view->m_model->fileItem(1).name(), "adddd");
+ QCOMPARE(view->m_model->fileItem(2).name(), "cccc");
+ QCOMPARE(view->m_model->fileItem(3).name(), "eaaaa");
+ QCOMPARE(view->m_model->count(), 4);
+}
+
+void DolphinMainWindowTest::testThumbnailAfterRename()
+{
+ // Create testdir and red square jpg for testing
+ QScopedPointer<TestDir> testDir{new TestDir()};
+ QImage testImage(256, 256, QImage::Format_Mono);
+ testImage.setColorCount(1);
+ testImage.setColor(0, qRgba(255, 0, 0, 255)); // Index #0 = Red
+ for (short x = 0; x < 256; ++x) {
+ for (short y = 0; y < 256; ++y) {
+ testImage.setPixel(x, y, 0);
+ }