+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);
+ }
+ }
+ testImage.save(testDir.data()->path() + "/a.jpg");
+
+ // Open dir and show it
+ m_mainWindow->openDirectories({testDir->url()}, false);
+ DolphinView *view = m_mainWindow->activeViewContainer()->view();
+ // Prepare signal spies
+ QSignalSpy viewDirectoryLoadingCompletedSpy(view, &DolphinView::directoryLoadingCompleted);
+ QSignalSpy itemsChangedSpy(view->m_model, &KFileItemModel::itemsChanged);
+ QSignalSpy modelDirectoryLoadingCompletedSpy(view->m_model, &KFileItemModel::directoryLoadingCompleted);
+ QSignalSpy previewUpdatedSpy(view->m_view->m_modelRolesUpdater, &KFileItemModelRolesUpdater::previewJobFinished);
+ // Show window and check that our preview has been updated, then wait for it to appear
+ m_mainWindow->show();
+ QVERIFY(viewDirectoryLoadingCompletedSpy.wait());
+ QVERIFY(previewUpdatedSpy.wait());
+ QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
+ QVERIFY(m_mainWindow->isVisible());
+ QTest::qWait(500); // we need to wait for the file widgets to become visible
+
+ // Set image selected and rename it to b.jpg, make sure editing role is working
+ view->markUrlsAsSelected({QUrl(testDir->url().toString() + "/a.jpg")});
+ view->updateViewState();
+ view->renameSelectedItems();
+ QVERIFY(view->m_view->m_editingRole);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_B);
+ QTest::keyClick(QApplication::focusWidget(), Qt::Key_Enter);
+ QVERIFY(itemsChangedSpy.wait()); // Make sure that rename worked
+
+ // Check that preview gets updated and filename is correct
+ QVERIFY(previewUpdatedSpy.wait());
+ QVERIFY(!view->m_view->m_editingRole);
+ QCOMPARE(view->m_model->fileItem(0).name(), "b.jpg");
+ QCOMPARE(view->m_model->count(), 1);
+}
+
+void DolphinMainWindowTest::testViewModeAfterDynamicView()
+{
+ GeneralSettings *settings = GeneralSettings::self();
+ settings->setDynamicView(true);
+ settings->save();
+
+ // prepare test data
+ QScopedPointer<TestDir> testDir{new TestDir()};
+ QString testDirUrl(QDir::cleanPath(testDir->url().toString()));
+ testDir->createDir("a");
+ 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);
+ }
+ }
+ testImage.save(testDir->url().path() + "/a/1.jpg");
+
+ // open test dir and set default view mode to "Details"
+ m_mainWindow->openDirectories({testDirUrl}, false);
+ DolphinView *view = m_mainWindow->activeViewContainer()->view();
+ QSignalSpy viewDirectoryLoadingCompletedSpy(view, &DolphinView::directoryLoadingCompleted);
+ QSignalSpy modelDirectoryLoadingCompletedSpy(view->m_model, &KFileItemModel::directoryLoadingCompleted);
+ m_mainWindow->show();
+ QVERIFY(viewDirectoryLoadingCompletedSpy.wait());
+ QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
+ QVERIFY(m_mainWindow->isVisible());
+ m_mainWindow->actionCollection()->action(QStringLiteral("details"))->trigger();
+ QCOMPARE(view->m_mode, DolphinView::DetailsView);
+
+ // move to child folder and check that dynamic view changed view mode to icons
+ m_mainWindow->openFiles({testDirUrl + "/a"}, false);
+ view->m_model->loadDirectory(QUrl(testDirUrl + "/a"));
+ view->setUrl(QUrl(testDirUrl + "/a"));
+ QVERIFY(modelDirectoryLoadingCompletedSpy.wait());
+ QCOMPARE(view->m_mode, DolphinView::IconsView);
+
+ // go back to parent folder and check that view mode reverted to details
+ m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::Back))->trigger();
+ view->m_model->loadDirectory(testDir->url());
+ view->setUrl(testDir->url());
+ QVERIFY(modelDirectoryLoadingCompletedSpy.wait());
+ QCOMPARE(view->m_mode, DolphinView::DetailsView);
+
+ // test for local views
+ settings->setGlobalViewProps(false);
+ settings->save();
+
+ // go to child folder and check DynamicViewPassed key in view properties as well as view mode
+ m_mainWindow->openFiles({testDirUrl + "/a"}, false);
+ view->m_model->loadDirectory(QUrl(testDirUrl + "/a"));
+ view->setUrl(QUrl(testDirUrl + "/a"));
+ QVERIFY(modelDirectoryLoadingCompletedSpy.wait());
+ QCOMPARE(view->m_mode, DolphinView::IconsView);
+ QTest::qWait(100);
+ QVERIFY(ViewProperties(view->viewPropertiesUrl()).dynamicViewPassed());
+
+ // change view mode of child folder to "Details"
+ m_mainWindow->actionCollection()->action(QStringLiteral("details"))->trigger();
+ QCOMPARE(view->m_mode, DolphinView::DetailsView);
+
+ // go back to parent folder
+ m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::Back))->trigger();
+ view->m_model->loadDirectory(testDir->url());
+ view->setUrl(testDir->url());
+ QVERIFY(modelDirectoryLoadingCompletedSpy.wait());
+ QCOMPARE(view->m_mode, DolphinView::DetailsView);
+ QVERIFY(!ViewProperties(view->viewPropertiesUrl()).dynamicViewPassed());
+
+ // go to child folder and make sure view mode change to "Details" is permanent
+ m_mainWindow->openFiles({testDirUrl + "/a"}, false);
+ view->m_model->loadDirectory(QUrl(testDirUrl + "/a"));
+ view->setUrl(QUrl(testDirUrl + "/a"));
+ QVERIFY(modelDirectoryLoadingCompletedSpy.wait());
+ QCOMPARE(view->m_mode, DolphinView::DetailsView);
+ QVERIFY(ViewProperties(view->viewPropertiesUrl()).dynamicViewPassed());
+}
+