Skip to content

Commit

Permalink
Stabilize tst_QSpinBox::sizeHint()
Browse files Browse the repository at this point in the history
The test function used to flake on Linux occasionally.
8e6ede7 provided a fix. While it
seemed to work, further analysis has shown that the root cause is
event sequence in case of multiple paint events.

This patch re-engineers the test function:

1. Allocate test widget on the stack instead of the heap.
2. Send layout requests posted by QHBoxLayout constructor and
QLayout::addWidget() before showing the widget.
3. Remove calls to QCoreApplication::processEvents().
They are unnessecary, because
- the size hint request counter is supposed to increase (by any number)
- QTRY_VERIFY processes events anyway until the counter increases or it
times out.

Pick-to: 6.5 6.4 6.2
Change-Id: I54998483725cbdd4899ba6f5469d7dae0980ab1d
Reviewed-by: Friedemann Kleint <[email protected]>
  • Loading branch information
ASpoerl committed Jan 3, 2023
1 parent d756f47 commit 71e67de
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1152,34 +1152,32 @@ class sizeHint_SpinBox : public QSpinBox

void tst_QSpinBox::sizeHint()
{
QWidget *widget = new QWidget;
QHBoxLayout *layout = new QHBoxLayout(widget);
widget->setLayout(layout);
QWidget widget;
QHBoxLayout *layout = new QHBoxLayout(&widget);

sizeHint_SpinBox *spinBox = new sizeHint_SpinBox;
layout->addWidget(spinBox);
widget->show();
QVERIFY(QTest::qWaitForWindowExposed(widget));
// Make sure all layout requests posted by the QHBoxLayout constructor and addWidget
// are processed before the widget is shown
QCoreApplication::sendPostedEvents(&widget, QEvent::LayoutRequest);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));

// Prefix
spinBox->sizeHintRequests = 0;
spinBox->setPrefix(QLatin1String("abcdefghij"));
qApp->processEvents();
QTRY_VERIFY(spinBox->sizeHintRequests > 0);

// Suffix
spinBox->sizeHintRequests = 0;
spinBox->setSuffix(QLatin1String("abcdefghij"));
qApp->processEvents();
QTRY_VERIFY(spinBox->sizeHintRequests > 0);

// Range
spinBox->sizeHintRequests = 0;
spinBox->setRange(0, 1234567890);
spinBox->setValue(spinBox->maximum());
qApp->processEvents();
QTRY_VERIFY(spinBox->sizeHintRequests > 0);

delete widget;
}

void tst_QSpinBox::taskQTBUG_5008_textFromValueAndValidate()
Expand Down

0 comments on commit 71e67de

Please sign in to comment.