summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp')
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 578ea9f693..372dd65ff4 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -57,6 +57,7 @@ private slots:
void changeFocusWindow();
void keyboardModifiers();
void modalWindow();
+ void quitOnLastWindowClosed();
};
class DummyWindow : public QWindow
@@ -491,5 +492,67 @@ void tst_QGuiApplication::modalWindow()
delete window1;
}
+void tst_QGuiApplication::quitOnLastWindowClosed()
+{
+ {
+ int argc = 0;
+ QGuiApplication app(argc, 0);
+
+ QTimer timer;
+ timer.setInterval(100);
+
+ QSignalSpy spy(&app, SIGNAL(aboutToQuit()));
+ QSignalSpy spy2(&timer, SIGNAL(timeout()));
+
+ QPointer<QWindow> mainWindow = new QWindow;
+ QPointer<QWindow> dialog = new QWindow;
+
+ dialog->setTransientParent(mainWindow);
+
+ QVERIFY(app.quitOnLastWindowClosed());
+
+ mainWindow->show();
+ dialog->show();
+
+ timer.start();
+ QTimer::singleShot(1000, mainWindow, SLOT(close())); // This should quit the application
+ QTimer::singleShot(2000, &app, SLOT(quit())); // This makes sure we quit even if it didn't
+
+ app.exec();
+
+ QCOMPARE(spy.count(), 1);
+ QVERIFY(spy2.count() < 15); // Should be around 10 if closing caused the quit
+ }
+ {
+ int argc = 0;
+ QGuiApplication app(argc, 0);
+
+ QTimer timer;
+ timer.setInterval(100);
+
+ QSignalSpy spy(&app, SIGNAL(aboutToQuit()));
+ QSignalSpy spy2(&timer, SIGNAL(timeout()));
+
+ QPointer<QWindow> mainWindow = new QWindow;
+ QPointer<QWindow> dialog = new QWindow;
+
+ QVERIFY(!dialog->transientParent());
+ QVERIFY(app.quitOnLastWindowClosed());
+
+ mainWindow->show();
+ dialog->show();
+
+ timer.start();
+ QTimer::singleShot(1000, mainWindow, SLOT(close())); // This should not quit the application
+ QTimer::singleShot(2000, &app, SLOT(quit()));
+
+ app.exec();
+
+ QCOMPARE(spy.count(), 1);
+ QVERIFY(spy2.count() > 15); // Should be around 20 if closing did not cause the quit
+ }
+}
+
+
QTEST_APPLESS_MAIN(tst_QGuiApplication)
#include "tst_qguiapplication.moc"