Test QWindow close() behavior

Verify that closing a QWindow using either the close()
API or a close event works as expected, and that the window
can be re-created. Also test QWindows with child windows.

Task-number: QTBUG-46701
Change-Id: I4c12452ff58e1233536c2d6932e72cf924d8ed74
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
bb10
Morten Johan Sørvig 2020-08-10 19:00:56 +02:00 committed by Volker Hilsheimer
parent 7ba75d088c
commit 8c2fda1ef5
1 changed files with 77 additions and 10 deletions

View File

@ -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();
a.show();
b.show();
// we can not close a non top level window
QVERIFY(!c.close());
QVERIFY(a.close());
QVERIFY(b.close());
// we can not close a non top level window
QVERIFY(!c.close());
QVERIFY(a.close());
QVERIFY(b.close());
}
// 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());
}
// 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()