]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/tests/kitemlistcontrollertest.cpp
dolphinview: Update thumbnail on filename change
[dolphin.git] / src / tests / kitemlistcontrollertest.cpp
index 40b2cecaad8fad5cc27ef7810e14976ff5cc90cf..de40331e6da65be42b7a746d698baec1901cd15d 100644 (file)
@@ -478,7 +478,7 @@ void KItemListControllerTest::testKeyboardNavigation_data()
                                      << qMakePair(KeyPress(Qt::Key_Home), ViewState(0, KItemSet() << 0));
                         }
 
-                        const QString testName = layoutNames[layout] + ", " + QString("%1 columns, ").arg(columnCount)
+                        const QString testName = layoutNames[layout] + ", " + QStringLiteral("%1 columns, ").arg(columnCount)
                             + selectionBehaviorNames[selectionBehavior] + ", " + groupingEnabledNames[groupingEnabled] + ", "
                             + layoutDirectionNames[layoutDirection];
 
@@ -543,13 +543,14 @@ void KItemListControllerTest::testKeyboardNavigation()
 
         QTest::keyClick(m_container, key, modifier);
 
-        QVERIFY2(m_selectionManager->currentItem() == current,
-                 qPrintable(QString("currentItem() returns index %1 but %2 would be expected. Before this, key \"%3\" was pressed. This test case is defined "
-                                    "in row %4 of the testList from KItemListControllerTest::testKeyboardNavigation_data().")
-                                .arg(m_selectionManager->currentItem())
-                                .arg(current)
-                                .arg(QKeySequence(key).toString())
-                                .arg(rowCount)));
+        QVERIFY2(
+            m_selectionManager->currentItem() == current,
+            qPrintable(QStringLiteral("currentItem() returns index %1 but %2 would be expected. Before this, key \"%3\" was pressed. This test case is defined "
+                                      "in row %4 of the testList from KItemListControllerTest::testKeyboardNavigation_data().")
+                           .arg(m_selectionManager->currentItem())
+                           .arg(current)
+                           .arg(QKeySequence(key).toString())
+                           .arg(rowCount)));
         switch (selectionBehavior) {
         case KItemListController::NoSelection:
             QVERIFY(m_selectionManager->selectedItems().isEmpty());
@@ -620,6 +621,41 @@ void KItemListControllerTest::testMouseClickActivation()
     mouseReleaseEvent.setButton(Qt::LeftButton);
     mouseReleaseEvent.setButtons(Qt::NoButton);
 
+    QGraphicsSceneMouseEvent mouseDoubleClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+    mouseDoubleClickEvent.setPos(pos);
+    mouseDoubleClickEvent.setButton(Qt::LeftButton);
+    mouseDoubleClickEvent.setButtons(Qt::LeftButton);
+
+    QGraphicsSceneMouseEvent mouseRightPressEvent(QEvent::GraphicsSceneMousePress);
+    mouseRightPressEvent.setPos(pos);
+    mouseRightPressEvent.setButton(Qt::RightButton);
+    mouseRightPressEvent.setButtons(Qt::RightButton);
+
+    QGraphicsSceneMouseEvent mouseRightReleaseEvent(QEvent::GraphicsSceneMouseRelease);
+    mouseRightReleaseEvent.setPos(pos);
+    mouseRightReleaseEvent.setButton(Qt::RightButton);
+    mouseRightReleaseEvent.setButtons(Qt::NoButton);
+
+    QGraphicsSceneMouseEvent mouseRightDoubleClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+    mouseRightDoubleClickEvent.setPos(pos);
+    mouseRightDoubleClickEvent.setButton(Qt::RightButton);
+    mouseRightDoubleClickEvent.setButtons(Qt::RightButton);
+
+    QGraphicsSceneMouseEvent mouseBackPressEvent(QEvent::GraphicsSceneMousePress);
+    mouseBackPressEvent.setPos(pos);
+    mouseBackPressEvent.setButton(Qt::BackButton);
+    mouseBackPressEvent.setButtons(Qt::BackButton);
+
+    QGraphicsSceneMouseEvent mouseBackReleaseEvent(QEvent::GraphicsSceneMouseRelease);
+    mouseBackReleaseEvent.setPos(pos);
+    mouseBackReleaseEvent.setButton(Qt::BackButton);
+    mouseBackReleaseEvent.setButtons(Qt::NoButton);
+
+    QGraphicsSceneMouseEvent mouseBackDoubleClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+    mouseBackDoubleClickEvent.setPos(pos);
+    mouseBackDoubleClickEvent.setButton(Qt::BackButton);
+    mouseBackDoubleClickEvent.setButtons(Qt::BackButton);
+
     QSignalSpy spyItemActivated(m_controller, &KItemListController::itemActivated);
 
     // Default setting: single click activation.
@@ -628,6 +664,7 @@ void KItemListControllerTest::testMouseClickActivation()
     m_view->event(&mouseReleaseEvent);
     QCOMPARE(spyItemActivated.count(), 1);
     spyItemActivated.clear();
+    QVERIFY2(!m_view->controller()->selectionManager()->hasSelection(), "An item should not be implicitly selected during activation. @see bug 424723");
 
     // Set the global setting to "double click activation".
     m_testStyle->setActivateItemOnSingleClick(false);
@@ -635,6 +672,30 @@ void KItemListControllerTest::testMouseClickActivation()
     m_view->event(&mouseReleaseEvent);
     QCOMPARE(spyItemActivated.count(), 0);
     spyItemActivated.clear();
+    QVERIFY(m_view->controller()->selectionManager()->hasSelection());
+
+    // emulation of double click according to https://doc.qt.io/qt-6/qgraphicsscene.html#mouseDoubleClickEvent
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    m_view->event(&mouseDoubleClickEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 1);
+    spyItemActivated.clear();
+    QVERIFY2(!m_view->controller()->selectionManager()->hasSelection(), "An item should not be implicitly selected during activation. @see bug 424723");
+
+    // right mouse button should not trigger activation
+    m_view->event(&mouseRightPressEvent);
+    m_view->event(&mouseRightReleaseEvent);
+    m_view->event(&mouseRightDoubleClickEvent);
+    m_view->event(&mouseRightReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 0);
+
+    // back mouse button should not trigger activation
+    m_view->event(&mouseBackPressEvent);
+    m_view->event(&mouseBackReleaseEvent);
+    m_view->event(&mouseBackDoubleClickEvent);
+    m_view->event(&mouseBackReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 0);
 
     // Enforce single click activation in the controller.
     m_controller->setSingleClickActivationEnforced(true);
@@ -642,6 +703,8 @@ void KItemListControllerTest::testMouseClickActivation()
     m_view->event(&mouseReleaseEvent);
     QCOMPARE(spyItemActivated.count(), 1);
     spyItemActivated.clear();
+    constexpr const char *reasonWhySelectionShouldPersist = "An item was selected before this mouse click. The click should not have cleared this selection.";
+    QVERIFY2(m_view->controller()->selectionManager()->hasSelection(), reasonWhySelectionShouldPersist);
 
     // Do not enforce single click activation in the controller.
     m_controller->setSingleClickActivationEnforced(false);
@@ -649,6 +712,7 @@ void KItemListControllerTest::testMouseClickActivation()
     m_view->event(&mouseReleaseEvent);
     QCOMPARE(spyItemActivated.count(), 0);
     spyItemActivated.clear();
+    QVERIFY2(m_view->controller()->selectionManager()->hasSelection(), reasonWhySelectionShouldPersist);
 
     // Set the global setting back to "single click activation".
     m_testStyle->setActivateItemOnSingleClick(true);
@@ -656,6 +720,7 @@ void KItemListControllerTest::testMouseClickActivation()
     m_view->event(&mouseReleaseEvent);
     QCOMPARE(spyItemActivated.count(), 1);
     spyItemActivated.clear();
+    QVERIFY2(m_view->controller()->selectionManager()->hasSelection(), reasonWhySelectionShouldPersist);
 
     // Enforce single click activation in the controller.
     m_controller->setSingleClickActivationEnforced(true);
@@ -663,6 +728,7 @@ void KItemListControllerTest::testMouseClickActivation()
     m_view->event(&mouseReleaseEvent);
     QCOMPARE(spyItemActivated.count(), 1);
     spyItemActivated.clear();
+    QVERIFY2(m_view->controller()->selectionManager()->hasSelection(), reasonWhySelectionShouldPersist);
 
     // Restore previous settings.
     m_controller->setSingleClickActivationEnforced(true);