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 6.7
Fixes: QTBUG-124475
Change-Id: Ic34228be953cf42dfe2ebf75957cd48791e6de7d
Reviewed-by: Liang Qi <liang.qi@qt.io>
bb10
Eskil Abrahamsen Blomfeldt 2024-04-23 13:36:23 +02:00
parent 51420d910b
commit 5711aaa017
1 changed files with 21 additions and 14 deletions

View File

@ -2418,6 +2418,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;
@ -2449,23 +2456,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
@ -2777,23 +2784,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()