From 82d54a6593321d5aaae223ed8aba34847725c942 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 3 Dec 2014 09:41:10 +0100 Subject: Stabilize tst_QWindowContainer. Fix window/widget leaks, observe available geometry. Change-Id: I19784d34a62c6e05dbc403852364cfb5e4d12dd5 Reviewed-by: Oliver Wolff --- .../qwindowcontainer/tst_qwindowcontainer.cpp | 54 ++++++++++++++++------ 1 file changed, 39 insertions(+), 15 deletions(-) (limited to 'tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp') diff --git a/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp b/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp index 61ec15a135..1be3f8a4ef 100644 --- a/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp +++ b/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp @@ -40,6 +40,8 @@ #include #include +#include +#include class Window : public QWindow @@ -65,6 +67,10 @@ public: class tst_QWindowContainer: public QObject { Q_OBJECT + +public: + tst_QWindowContainer() : m_availableGeometry(QGuiApplication::primaryScreen()->availableGeometry()) {} + private slots: void testShow(); void testPositionAndSize(); @@ -75,14 +81,22 @@ private slots: void testActivation(); void testAncestorChange(); void testDockWidget(); -}; + void cleanup(); +private: + const QRect m_availableGeometry; +}; +void tst_QWindowContainer::cleanup() +{ + QVERIFY(QGuiApplication::topLevelWindows().isEmpty()); +} void tst_QWindowContainer::testShow() { QWidget root; - root.setGeometry(100, 100, 400, 400); + root.setWindowTitle(QTest::currentTestFunction()); + root.setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 400, 400); Window *window = new Window(); QWidget *container = QWidget::createWindowContainer(window, &root); @@ -99,14 +113,15 @@ void tst_QWindowContainer::testShow() void tst_QWindowContainer::testPositionAndSize() { QWindow *window = new QWindow(); - window->setGeometry(300, 400, 500, 600); + window->setGeometry(m_availableGeometry.x() + 300, m_availableGeometry.y() + 400, 500, 600); - QWidget *container = QWidget::createWindowContainer(window); + QScopedPointer container(QWidget::createWindowContainer(window)); + container->setWindowTitle(QTest::currentTestFunction()); container->setGeometry(50, 50, 200, 200); container->show(); - QVERIFY(QTest::qWaitForWindowExposed(container)); + QVERIFY(QTest::qWaitForWindowExposed(container.data())); QCOMPARE(window->x(), 0); QCOMPARE(window->y(), 0); @@ -120,11 +135,12 @@ void tst_QWindowContainer::testExposeObscure() { Window *window = new Window(); - QWidget *container = QWidget::createWindowContainer(window); - container->setGeometry(50, 50, 200, 200); + QScopedPointer container(QWidget::createWindowContainer(window)); + container->setWindowTitle(QTest::currentTestFunction()); + container->setGeometry(m_availableGeometry.x() + 50, m_availableGeometry.y() + 50, 200, 200); container->show(); - QVERIFY(QTest::qWaitForWindowExposed(container)); + QVERIFY(QTest::qWaitForWindowExposed(container.data())); QVERIFY(QTest::qWaitForWindowExposed(window)); QVERIFY(window->numberOfExposes > 0); @@ -173,12 +189,13 @@ void tst_QWindowContainer::testBehindTheScenesDeletion() void tst_QWindowContainer::testActivation() { QWidget root; + root.setWindowTitle(QTest::currentTestFunction()); QWindow *window = new QWindow(); QWidget *container = QWidget::createWindowContainer(window, &root); container->setGeometry(100, 100, 200, 100); - root.setGeometry(100, 100, 400, 300); + root.setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 400, 300); root.show(); root.activateWindow(); @@ -212,14 +229,15 @@ void tst_QWindowContainer::testActivation() void tst_QWindowContainer::testUnparenting() { QWindow *window = new QWindow(); - QWidget *container = QWidget::createWindowContainer(window); - container->setGeometry(100, 100, 200, 100); + QScopedPointer container(QWidget::createWindowContainer(window)); + container->setWindowTitle(QTest::currentTestFunction()); + container->setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 200, 100); window->setParent(0); container->show(); - QVERIFY(QTest::qWaitForWindowExposed(container)); + QVERIFY(QTest::qWaitForWindowExposed(container.data())); // Window should not be made visible by container.. QVERIFY(!window->isVisible()); @@ -228,10 +246,12 @@ void tst_QWindowContainer::testUnparenting() void tst_QWindowContainer::testAncestorChange() { QWidget root; + root.setWindowTitle(QStringLiteral("Root ") + QTest::currentTestFunction()); QWidget *left = new QWidget(&root); QWidget *right = new QWidget(&root); - root.setGeometry(0, 0, 200, 100); + + root.setGeometry(m_availableGeometry.x() + 50, m_availableGeometry.y() + 50, 200, 100); left->setGeometry(0, 0, 100, 100); right->setGeometry(100, 0, 100, 100); @@ -257,6 +277,7 @@ void tst_QWindowContainer::testAncestorChange() QCOMPARE(window->geometry(), QRect(100, 0, 100, 100)); QWidget *newRoot = new QWidget(&root); + newRoot->setWindowTitle(QStringLiteral("newRoot ") + QTest::currentTestFunction()); newRoot->setGeometry(50, 50, 200, 200); right->setParent(newRoot); // Root @@ -270,7 +291,8 @@ void tst_QWindowContainer::testAncestorChange() QCOMPARE(window->geometry(), QRect(100, 0, 100, 100)); newRoot->setParent(0); - newRoot->setGeometry(100, 100, 200, 200); + QScopedPointer newRootGuard(newRoot); + newRoot->setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 200, 200); newRoot->show(); QVERIFY(QTest::qWaitForWindowExposed(newRoot)); QCOMPARE(newRoot->windowHandle(), window->parent()); @@ -285,9 +307,11 @@ void tst_QWindowContainer::testAncestorChange() void tst_QWindowContainer::testDockWidget() { QMainWindow mainWindow; + mainWindow.setWindowTitle(QTest::currentTestFunction()); mainWindow.resize(200, 200); + mainWindow.move(m_availableGeometry.center() - QPoint(100, 100)); - QDockWidget *dock = new QDockWidget(); + QDockWidget *dock = new QDockWidget(QStringLiteral("Dock ") + QTest::currentTestFunction()); QWindow *window = new QWindow(); QWidget *container = QWidget::createWindowContainer(window); dock->setWidget(container); -- cgit v1.2.3