[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/apps/dolphin/src/tests
From:       Frank Reininghaus <frank78ac () googlemail ! com>
Date:       2011-01-16 14:13:31
Message-ID: 20110116141331.053E2AC8B4 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1214822 by freininghaus:

DolphinTreeViewTest: Add unit test for bug 220898 (rubberband
selection failure after a keyboard focus change in between key press
and key release events)


 M  +78 -1     dolphintreeviewtest.cpp  


--- trunk/KDE/kdebase/apps/dolphin/src/tests/dolphintreeviewtest.cpp #1214821:1214822
@@ -36,6 +36,7 @@
     void testKeyboardNavigationSelectionUpdate();
 
     void bug218114_visualRegionForSelection();
+    void bug220898_focusOut();
 
 private:
 
@@ -333,6 +334,82 @@
     QVERIFY(boundingRect.contains(view.visualRect(index2)));
 }
 
+/**
+ * This test verifies that selection of multiple items with the mouse works
+ * if a key was pressed and the keyboard focus moved to another window before the
+ * key was released, see
+ *
+ * https://bugs.kde.org/show_bug.cgi?id=220898
+ */
+
+void DolphinTreeViewTest::bug220898_focusOut()
+{
+    QStringList items;
+    items << "a" << "b" << "c" << "d" << "e";
+    QStringListModel model(items);
+
+    QModelIndex index[5];
+    for (int i = 0; i < 5; i++) {
+        index[i] = model.index(i, 0);
+    }
+
+    TestView view;
+    view.setModel(&model);
+    view.setSelectionMode(QAbstractItemView::ExtendedSelection);
+    view.resize(400, 400);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+
+    view.setCurrentIndex(index[0]);
+    verifyCurrentItemAndSelection(view, index[0]);
+
+    // Press Down
+    QTest::keyPress(view.viewport(), Qt::Key_Down, Qt::NoModifier);
+
+    // Move keyboard focus to another widget
+    QWidget widget;
+    widget.show();
+    QTest::qWaitForWindowShown(&widget);
+    widget.setFocus();
+
+    // Wait until the widgets have received the focus events
+    while (view.viewport()->hasFocus() || !widget.hasFocus()) {
+        QTest::qWait(10);
+    }
+    QVERIFY(widget.hasFocus());
+    QVERIFY(!view.viewport()->hasFocus());
+
+    // Release the "Down" key
+    QTest::keyRelease(&widget, Qt::Key_Down, Qt::NoModifier);
+
+    // Move keyboard focus back to the view
+    widget.hide();
+    view.viewport()->setFocus();
+
+    // Wait until the widgets have received the focus events
+    while (!view.viewport()->hasFocus() || widget.hasFocus()) {
+        QTest::qWait(10);
+    }
+    QVERIFY(!widget.hasFocus());
+    QVERIFY(view.viewport()->hasFocus());
+
+    // Press left mouse button below the last item
+    const int lastRowHeight = view.sizeHintForRow(4);
+    QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, \
view.visualRect(index[4]).center() + QPoint(0, lastRowHeight)); +
+    // Move mouse to the first item and release
+    QTest::mouseMove(view.viewport(), view.visualRect(index[0]).center());
+    QMouseEvent moveEvent(QEvent::MouseMove, view.visualRect(index[0]).center(), \
Qt::NoButton, Qt::LeftButton, Qt::NoModifier); +    bool moveEventReceived = \
qApp->notify(view.viewport(), &moveEvent); +    QVERIFY(moveEventReceived);
+    QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, \
view.visualRect(index[0]).center()); +
+    // All items should be selected
+    QModelIndexList expectedSelection;
+    expectedSelection << index[0] << index[1] << index[2] << index[3] << index[4];
+    verifyCurrentItemAndSelection(view, index[0], expectedSelection);
+}
+
 QTEST_KDEMAIN(DolphinTreeViewTest, GUI)
 
-#include "dolphintreeviewtest.moc"
\ No newline at end of file
+#include "dolphintreeviewtest.moc"


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic