From 1d97ada3a8e82dc2aeac87091aa0b6eebd750709 Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Mon, 18 Sep 2023 21:26:29 +0100 Subject: [PATCH] Add test for issue #360 Issue #326 is in the way, so added a workaround. When #326 is fixed, this test will test both code paths. --- tests/qtwidgets/tst_qtwidgets.cpp | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/qtwidgets/tst_qtwidgets.cpp b/tests/qtwidgets/tst_qtwidgets.cpp index ff2815da8..7d538eeec 100644 --- a/tests/qtwidgets/tst_qtwidgets.cpp +++ b/tests/qtwidgets/tst_qtwidgets.cpp @@ -160,6 +160,8 @@ private Q_SLOTS: void tst_standaloneTitleBar(); void tst_widgetAddQAction(); void tst_currentTabChanged(); + void tst_nestedMainWindowToggle(); + void tst_nestedMainWindowToggle_data(); // And fix these void tst_floatingWindowDeleted(); @@ -1840,6 +1842,61 @@ void TestQtWidgets::tst_currentTabChanged() QCOMPARE(count2, 1); } +void TestQtWidgets::tst_nestedMainWindowToggle_data() +{ + QTest::addColumn("waitAfterClose"); + + // QTest::newRow("false") << false; // uncomment after #326 is fixed + QTest::newRow("true") << true; +} + +void TestQtWidgets::tst_nestedMainWindowToggle() +{ + QFETCH(bool, waitAfterClose); + + EnsureTopLevelsDeleted e; + auto mainWindow = createMainWindow(QSize(1000, 1000), MainWindowOption_None, "MW1"); + auto nestedMainWindow = createMainWindow(QSize(1000, 1000), MainWindowOption_None, "MW2"); + mainWindow->setObjectName("root main window"); + + auto dock1 = new KDDockWidgets::QtWidgets::DockWidget(QStringLiteral("Nested MainWindow Dock container")); + auto nestedMainWindowQWidget = static_cast(QtCommon::View_qt::asQWidget(nestedMainWindow->view())); + dock1->setWidget(nestedMainWindowQWidget); + mainWindow->addDockWidget(dock1->asDockWidgetController(), Location_OnBottom); + + auto nestedDock = new KDDockWidgets::QtWidgets::DockWidget(QStringLiteral("Nested Dock")); + nestedMainWindow->addDockWidget(nestedDock->asDockWidgetController(), Location_OnBottom); + nestedMainWindowQWidget->menuBar()->addMenu("Just a visual cue, to notice the nesting"); + nestedMainWindowQWidget->setObjectName("nested main window"); + QPointer guard = nestedMainWindowQWidget; + + // Close dock1: + QVERIFY(dock1->isOpen()); + QVERIFY(nestedDock->isOpen()); + + dock1->close(); + QVERIFY(guard); // For some reason nested main window was being deleted + QVERIFY(!dock1->isOpen()); + QVERIFY(!nestedDock->isOpen()); + + // Reopen dock1, the nested dockwidgets should also reopen + + if (waitAfterClose) { + // If false, tests #326, otherwise tests #360 + Platform::instance()->tests_wait(1000); + } + + dock1->open(); + + QVERIFY(guard); + QVERIFY(dock1->isOpen()); + QVERIFY(dock1->isVisible()); + QVERIFY(nestedMainWindowQWidget->isVisible()); + + QEXPECT_FAIL("", "Bug #360, to be fixed", Continue); + QVERIFY(nestedDock->isOpen()); +} + void TestQtWidgets::tstQGraphicsProxyWidget() { // Tests that using a QGraphicsProxyWidget doesn't crash