summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp87
1 files changed, 77 insertions, 10 deletions
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index e4cee0e89c..67ea378c66 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -1604,18 +1604,85 @@ void tst_QWindow::sizes()
void tst_QWindow::close()
{
- QWindow a;
- a.setTitle(QLatin1String(QTest::currentTestFunction()));
- QWindow b;
- QWindow c(&a);
+ {
+ QWindow a;
+ QWindow b;
+ QWindow c(&a);
+
+ a.show();
+ b.show();
+
+ // we can not close a non top level window
+ QVERIFY(!c.close());
+ QVERIFY(a.close());
+ QVERIFY(b.close());
+ }
- a.show();
- b.show();
+ // Verify that closing a QWindow deletes its platform window,
+ // independent of API used to close the window.
+ {
+ // Close with QWindow::close
+ {
+ QWindow w;
+ w.create();
+ QVERIFY(w.handle());
+ w.close();
+ QVERIFY(!w.handle());
+ }
- // we can not close a non top level window
- QVERIFY(!c.close());
- QVERIFY(a.close());
- QVERIFY(b.close());
+ // Close with QWindowSystemInterface::handleCloseEvent();
+ {
+ QWindow w;
+ w.create();
+ QVERIFY(w.handle());
+ QWindowSystemInterface::handleCloseEvent(&w);
+ QCoreApplication::processEvents();
+ QVERIFY(!w.handle());
+ }
+ }
+
+ // Verify that closing a QWindow deletes the platform window for
+ // child windows
+ {
+ QWindow w;
+ QWindow c(&w);
+ w.create();
+ c.create();
+ QVERIFY(w.handle());
+ QVERIFY(c.handle());
+ w.close();
+ QVERIFY(!w.handle());
+ QVERIFY(!c.handle());
+ }
+
+ // Verify that re-creating closed windows is possble.
+ {
+ // Re-create top-level window
+ {
+ QWindow w;
+ w.create();
+ QVERIFY(w.handle());
+ w.close();
+ QVERIFY(!w.handle());
+ w.create();
+ QVERIFY(w.handle());
+ }
+
+ // Re-create top-level window with child window
+ {
+ QWindow w;
+ QWindow c(&w);
+ c.create();
+ QVERIFY(w.handle());
+ QVERIFY(c.handle());
+ w.close();
+ QVERIFY(!w.handle());
+ QVERIFY(!c.handle());
+ c.create();
+ QVERIFY(w.handle());
+ QVERIFY(c.handle());
+ }
+ }
}
void tst_QWindow::activateAndClose()