diff options
Diffstat (limited to 'tests/auto/quick/qquickitem2/tst_qquickitem.cpp')
-rw-r--r-- | tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp index f0f5873ace..7107f4d995 100644 --- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp @@ -64,6 +64,7 @@ private slots: void activeFocusOnTab8(); void activeFocusOnTab9(); void activeFocusOnTab10(); + void activeFocusOnTab_infiniteLoop(); void nextItemInFocusChain(); void nextItemInFocusChain2(); @@ -1023,6 +1024,22 @@ void tst_QQuickItem::activeFocusOnTab10() delete window; } +void tst_QQuickItem::activeFocusOnTab_infiniteLoop() +{ + // see QTBUG-68271 + // create a window where the currently focused item is not visible + QScopedPointer<QQuickView>window(new QQuickView()); + window->setSource(testFileUrl("activeFocusOnTab_infiniteLoop.qml")); + window->show(); + auto *hiddenChild = findItem<QQuickItem>(window->rootObject(), "hiddenChild"); + QVERIFY(hiddenChild); + + // move the focus - this used to result in an infinite loop + auto *item = hiddenChild->nextItemInFocusChain(); + // focus is moved to the root object since there is no other candidate + QCOMPARE(item, window->rootObject()); +} + void tst_QQuickItem::nextItemInFocusChain() { if (!qt_tab_all_widgets()) |