test: Don't crash when focusWidget() is null

If QApplication::focusWidget() returns null, which was the
case on Wayland under some circumstances, then the code collecting
the error output would crash when dereferencing the null pointer.

This fixes that crash and gets proper test failure output instead.

Pick-to: 6.5
Fixes: QTBUG-124475
Change-Id: Ic34228be953cf42dfe2ebf75957cd48791e6de7d
Reviewed-by: Liang Qi <liang.qi@qt.io>
(cherry picked from commit 5711aaa0170bd97dab1479c0e6c884289e41da99)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2024-04-23 13:36:23 +02:00 committed by Qt Cherry-pick Bot
parent 8302c727e6
commit 5310cce3ce

View File

@ -2330,6 +2330,13 @@ void tst_QWidget::tabOrderWithProxy()
QVERIFY(firstEdit->hasFocus());
}
static QString focusWidgetName()
{
return QApplication::focusWidget() != nullptr
? QApplication::focusWidget()->objectName()
: QStringLiteral("No focus widget");
}
void tst_QWidget::tabOrderWithProxyDisabled()
{
Container container;
@ -2362,23 +2369,23 @@ void tst_QWidget::tabOrderWithProxyDisabled()
QSKIP("Window failed to activate, skipping test");
QVERIFY2(lineEdit1.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.tab();
QVERIFY2(!lineEdit2.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
QVERIFY2(lineEdit3.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.tab();
QVERIFY2(lineEdit1.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.backTab();
QVERIFY2(lineEdit3.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.backTab();
QVERIFY2(!lineEdit2.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
QVERIFY2(lineEdit1.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
}
//#define DEBUG_FOCUS_CHAIN
@ -2692,23 +2699,23 @@ void tst_QWidget::tabOrderWithCompoundWidgetsNoFocusPolicy()
QSKIP("Window failed to activate, skipping test");
QVERIFY2(spinbox1.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.tab();
QVERIFY2(!spinbox2.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
QVERIFY2(spinbox3.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.tab();
QVERIFY2(spinbox1.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.backTab();
QVERIFY2(spinbox3.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
container.backTab();
QVERIFY2(!spinbox2.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
QVERIFY2(spinbox1.hasFocus(),
qPrintable(QApplication::focusWidget()->objectName()));
qPrintable(focusWidgetName()));
}
void tst_QWidget::tabOrderNoChange()