summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 7ca08993ab..21e77378d1 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -52,6 +52,7 @@
#include <qmainwindow.h>
#include <qdockwidget.h>
#include <qrandom.h>
+#include <qsignalspy.h>
#include <qstylehints.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
@@ -425,6 +426,7 @@ private slots:
void receivesApplicationFontChangeEvent();
void receivesApplicationPaletteChangeEvent();
void deleteWindowInCloseEvent();
+ void quitOnClose();
private:
bool ensureScreenSize(int width, int height);
@@ -11946,5 +11948,34 @@ void tst_QWidget::deleteWindowInCloseEvent()
QVERIFY(true);
}
+/*!
+ Verify that both closing and deleting the last (only) window-widget
+ exits the application event loop.
+*/
+void tst_QWidget::quitOnClose()
+{
+ QSignalSpy quitSpy(qApp, &QApplication::lastWindowClosed);
+
+ std::unique_ptr<QWidget>widget(new QWidget);
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(widget.get()));
+
+ // QGuiApplication::lastWindowClosed is documented to only be emitted
+ // when we are in exec()
+ QTimer::singleShot(0, widget.get(), [&]{
+ widget->close();
+ });
+ QApplication::exec();
+ QCOMPARE(quitSpy.count(), 1);
+
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(widget.get()));
+ QTimer::singleShot(0, widget.get(), [&]{
+ widget.reset();
+ });
+ QApplication::exec();
+ QCOMPARE(quitSpy.count(), 2);
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"