summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp')
-rw-r--r--tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp57
1 files changed, 39 insertions, 18 deletions
diff --git a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
index 80c12c0bd2..cad7bd69d7 100644
--- a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
+++ b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
@@ -658,13 +658,34 @@ public:
class EventCounterSpy : public QObject
{
public:
- EventCounterSpy(QWidget *parentWidget) : QObject(parentWidget)
+ EventCounterSpy(QWidget *obj) : objectToWatch(obj)
{ }
+ ~EventCounterSpy()
+ {
+ removeEventFilter();
+ }
+
+ void installEventFilter()
+ {
+ if (needRemoveEventFilter)
+ return;
+ needRemoveEventFilter = true;
+ qApp->installEventFilter(this);
+ }
+
+ void removeEventFilter()
+ {
+ if (!needRemoveEventFilter)
+ return;
+ needRemoveEventFilter = false;
+ qApp->removeEventFilter(this);
+ }
+
bool eventFilter(QObject *watched, QEvent *event) override
{
// Watch for events in the parent widget and all its children
- if (watched == parent() || watched->parent() == parent()) {
+ if (watched == objectToWatch || watched->parent() == objectToWatch) {
if (event->type() == QEvent::Resize)
resizeCount++;
else if (event->type() == QEvent::Paint)
@@ -676,6 +697,8 @@ public:
int resizeCount = 0;
int paintCount = 0;
+ bool needRemoveEventFilter = false;
+ QObject *objectToWatch;
};
void tst_QSplitter::replaceWidget_data()
@@ -733,31 +756,30 @@ void tst_QSplitter::replaceWidget()
// to set a shorter label.
QLabel *newWidget = new QLabel(QLatin1String("<b>NEW</b>"));
- EventCounterSpy *ef = new EventCounterSpy(&sp);
- qApp->installEventFilter(ef);
+ EventCounterSpy ef(&sp);
+ ef.installEventFilter();
const QWidget *res = sp.replaceWidget(index, newWidget);
QTest::qWait(100); // Give visibility and resizing some time
- qApp->removeEventFilter(ef);
// Check
if (index < 0 || index >= count) {
QVERIFY(!res);
QVERIFY(!newWidget->parentWidget());
- QCOMPARE(ef->resizeCount, 0);
- QCOMPARE(ef->paintCount, 0);
+ QCOMPARE(ef.resizeCount, 0);
+ QCOMPARE(ef.paintCount, 0);
} else {
QCOMPARE(res, oldWidget);
QVERIFY(!res->parentWidget());
QVERIFY(!res->isVisible());
+ const int expectedResizeCount = visible ? 1 : 0; // new widget only
+ const int expectedPaintCount = visible && !collapsed ? 2 : 0; // splitter and new widget
+ QTRY_COMPARE(ef.resizeCount, expectedResizeCount);
+ QTRY_COMPARE(ef.paintCount, expectedPaintCount);
QCOMPARE(newWidget->parentWidget(), &sp);
QCOMPARE(newWidget->isVisible(), visible);
if (visible && !collapsed)
QCOMPARE(newWidget->geometry(), oldGeom);
QCOMPARE(newWidget->size().isEmpty(), !visible || collapsed);
- const int expectedResizeCount = visible ? 1 : 0; // new widget only
- const int expectedPaintCount = visible && !collapsed ? 2 : 0; // splitter and new widget
- QCOMPARE(ef->resizeCount, expectedResizeCount);
- QCOMPARE(ef->paintCount, expectedPaintCount);
delete res;
}
QCOMPARE(sp.count(), count);
@@ -797,25 +819,24 @@ void tst_QSplitter::replaceWidgetWithSplitterChild()
const QList<int> sizes = sp.sizes();
QWidget *sibling = srcIndex == -1 ? (new QLabel("<b>NEW</b>", &sp)) : sp.widget(srcIndex);
- EventCounterSpy *ef = new EventCounterSpy(&sp);
- qApp->installEventFilter(ef);
+ EventCounterSpy ef(&sp);
+ ef.installEventFilter();
const QWidget *res = sp.replaceWidget(dstIndex, sibling);
QTest::qWait(100); // Give visibility and resizing some time
- qApp->removeEventFilter(ef);
QVERIFY(!res);
if (srcIndex == -1) {
// Create and replace before recalc. The sibling is scheduled to be
// added after replaceWidget(), when QSplitter receives a child event.
- QVERIFY(ef->resizeCount > 0);
- QVERIFY(ef->paintCount > 0);
+ QTRY_VERIFY(ef.resizeCount > 0);
+ QTRY_VERIFY(ef.paintCount > 0);
QCOMPARE(sp.count(), count + 1);
QCOMPARE(sp.sizes().mid(0, count), sizes);
QCOMPARE(sp.sizes().last(), sibling->width());
} else {
// No-op for the rest
- QCOMPARE(ef->resizeCount, 0);
- QCOMPARE(ef->paintCount, 0);
+ QCOMPARE(ef.resizeCount, 0);
+ QCOMPARE(ef.paintCount, 0);
QCOMPARE(sp.count(), count);
QCOMPARE(sp.sizes(), sizes);
}