diff --git a/tests/tst_common.cpp b/tests/tst_common.cpp index 8df64726..4fa5f0c6 100644 --- a/tests/tst_common.cpp +++ b/tests/tst_common.cpp @@ -98,8 +98,17 @@ private Q_SLOTS: void tst_negativeAnchorPosition4(); void tst_negativeAnchorPosition5(); void tst_startHidden(); + void tst_startHidden2(); + void tst_startClosed(); void tst_closeReparentsToNull(); void tst_invalidAnchorGroup(); + void tst_addAsPlaceholder(); + void tst_removeItem(); + void tst_clear(); + void tst_samePositionAfterHideRestore(); + void tst_dockDockWidgetNested(); + void tst_dockFloatingWindowNested(); + void tst_crash(); }; void TestCommon::tst_simple1() @@ -945,6 +954,63 @@ void TestCommon::tst_startHidden() delete dock1; } +void TestCommon::tst_startHidden2() +{ + EnsureTopLevelsDeleted e; + { + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("dock1", new QPushButton("one"), {}, false); + auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); + + auto dropArea = m->dropArea(); + MultiSplitter *layout = dropArea; + + m->addDockWidget(dock1, Location_OnTop, nullptr, AddingOption_StartHidden); + QVERIFY(layout->checkSanity()); + + QCOMPARE(layout->count(), 1); + QCOMPARE(layout->placeholderCount(), 1); + + m->addDockWidget(dock2, Location_OnTop); + QVERIFY(layout->checkSanity()); + + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + + qDebug() << dock1->isVisible(); + dock1->show(); + + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 0); + + Testing::waitForResize(dock2); + } + + { + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("dock1", new QPushButton("one"), {}, false); + auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); + auto dock3 = createDockWidget("dock3", new QPushButton("three"), {}, false); + + auto dropArea = m->dropArea(); + MultiSplitter *layout = dropArea; + m->addDockWidget(dock1, Location_OnLeft, nullptr, AddingOption_StartHidden); + + m->addDockWidget(dock2, Location_OnBottom, nullptr, AddingOption_StartHidden); + m->addDockWidget(dock3, Location_OnRight, nullptr, AddingOption_StartHidden); + + dock1->show(); + + QCOMPARE(layout->count(), 3); + QCOMPARE(layout->placeholderCount(), 2); + + dock2->show(); + dock3->show(); + Testing::waitForResize(dock2); + layout->checkSanity(); + } +} + void TestCommon::tst_negativeAnchorPosition2() { // Tests that the "Out of bounds position" warning doesn't appear. Test will abort if yes. @@ -1099,4 +1165,262 @@ void TestCommon::tst_invalidAnchorGroup() } } +void TestCommon::tst_addAsPlaceholder() +{ + EnsureTopLevelsDeleted e; + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("dock1", new QPushButton("one"), {}, false); + auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); + + m->addDockWidget(dock1, Location_OnBottom); + m->addDockWidget(dock2, Location_OnTop, nullptr, AddingOption_StartHidden); + + auto dropArea = m->dropArea(); + MultiSplitter *layout = dropArea; + + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + QVERIFY(!dock2->isVisible()); + + dock2->show(); + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 0); + + layout->checkSanity(); + + // Cleanup + dock2->deleteLater(); + Testing::waitForDeleted(dock2); +} + +void TestCommon::tst_removeItem() +{ + // Tests that MultiSplitterLayout::removeItem() works + EnsureTopLevelsDeleted e; + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("dock1", new QPushButton("one")); + auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); + auto dock3 = createDockWidget("dock3", new QPushButton("three")); + + m->addDockWidget(dock1, Location_OnBottom); + m->addDockWidget(dock2, Location_OnTop, nullptr, AddingOption_StartHidden); + Item *item2 = dock2->lastPositions().lastItem(); + + auto dropArea = m->dropArea(); + MultiSplitter *layout = dropArea; + + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + + // 1. Remove an item that's a placeholder + + layout->removeItem(item2); + + QCOMPARE(layout->count(), 1); + QCOMPARE(layout->placeholderCount(), 0); + + // 2. Remove an item that has an actual widget + Item *item1 = dock1->lastPositions().lastItem(); + layout->removeItem(item1); + QCOMPARE(layout->count(), 0); + QCOMPARE(layout->placeholderCount(), 0); + + // 3. Remove an item that has anchors following one of its other anchors (Tests that anchors stop following) + // Stack 1, 2, 3 + m->addDockWidget(dock3, Location_OnBottom); + m->addDockWidget(dock2, Location_OnBottom); + m->addDockWidget(dock1, Location_OnBottom); + QCOMPARE(layout->count(), 3); + QCOMPARE(layout->placeholderCount(), 0); + + dock2->close(); + auto frame1 = dock1->frame(); + dock1->close(); + QVERIFY(Testing::waitForDeleted(frame1)); + + QCOMPARE(layout->count(), 3); + QCOMPARE(layout->placeholderCount(), 2); + + // Now remove the items + layout->removeItem(dock2->lastPositions().lastItem()); + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + layout->checkSanity(); + layout->removeItem(dock1->lastPositions().lastItem()); + QCOMPARE(layout->count(), 1); + QCOMPARE(layout->placeholderCount(), 0); + + // Add again + m->addDockWidget(dock2, Location_OnBottom); + m->addDockWidget(dock1, Location_OnBottom); + dock2->close(); + frame1 = dock1->frame(); + dock1->close(); + QVERIFY(Testing::waitForDeleted(frame1)); + + // Now remove the items, but first dock1 + layout->removeItem(dock1->lastPositions().lastItem()); + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + layout->checkSanity(); + layout->removeItem(dock2->lastPositions().lastItem()); + QCOMPARE(layout->count(), 1); + QCOMPARE(layout->placeholderCount(), 0); + layout->checkSanity(); + + // Add again, stacked as 1, 2, 3, then close 2 and 3. + m->addDockWidget(dock2, Location_OnTop); + m->addDockWidget(dock1, Location_OnTop); + + auto frame2 = dock2->frame(); + dock2->close(); + Testing::waitForDeleted(frame2); + + auto frame3 = dock3->frame(); + dock3->close(); + Testing::waitForDeleted(frame3); + + // The second anchor is now following the 3rd, while the 3rd is following 'bottom' + layout->removeItem(dock3->lastPositions().lastItem()); // will trigger the 3rd anchor to be removed + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + layout->checkSanity(); + + dock1->deleteLater(); + dock2->deleteLater(); + dock3->deleteLater(); + Testing::waitForDeleted(dock3); +} + +void TestCommon::tst_clear() +{ + // Tests MultiSplitterLayout::clear() + EnsureTopLevelsDeleted e; + QCOMPARE(Frame::dbg_numFrames(), 0); + + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("1", new QPushButton("1")); + auto dock2 = createDockWidget("2", new QPushButton("2")); + auto dock3 = createDockWidget("3", new QPushButton("3")); + auto fw3 = dock3->floatingWindow(); + + m->addDockWidget(dock1, Location_OnLeft); + m->addDockWidget(dock2, Location_OnRight); + m->addDockWidget(dock3, Location_OnRight); + QVERIFY(Testing::waitForDeleted(fw3)); + dock3->close(); + + QCOMPARE(Frame::dbg_numFrames(), 3); + + auto layout = m->multiSplitter(); + layout->rootItem()->clear(); + + QCOMPARE(layout->count(), 0); + QCOMPARE(layout->placeholderCount(), 0); + layout->checkSanity(); + + // Cleanup + dock3->deleteLater(); + QVERIFY(Testing::waitForDeleted(dock3)); +} + +void TestCommon::tst_samePositionAfterHideRestore() +{ + EnsureTopLevelsDeleted e; + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("1", new QPushButton("1")); + auto dock2 = createDockWidget("2", new QPushButton("2")); + auto dock3 = createDockWidget("3", new QPushButton("3")); + + m->addDockWidget(dock1, Location_OnLeft); + m->addDockWidget(dock2, Location_OnRight); + m->addDockWidget(dock3, Location_OnRight); + QRect geo2 = dock2->frame()->QWidgetAdapter::geometry(); + dock2->setFloating(true); + + auto fw2 = dock2->floatingWindow(); + dock2->setFloating(false); + QVERIFY(Testing::waitForDeleted(fw2)); + QCOMPARE(geo2, dock2->frame()->QWidgetAdapter::geometry()); + m->multiSplitter()->checkSanity(); +} + +void TestCommon::tst_startClosed() +{ + EnsureTopLevelsDeleted e; + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("dock1", new QPushButton("one")); + auto dock2 = createDockWidget("dock2", new QPushButton("two")); + + auto dropArea = m->dropArea(); + MultiSplitter *layout = dropArea; + + m->addDockWidget(dock1, Location_OnTop); + Frame *frame1 = dock1->frame(); + dock1->close(); + Testing::waitForDeleted(frame1); + + QCOMPARE(layout->count(), 1); + QCOMPARE(layout->placeholderCount(), 1); + + m->addDockWidget(dock2, Location_OnTop); + + layout->checkSanity(); + + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + + dock1->show(); + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 0); +} + +void TestCommon::tst_dockDockWidgetNested() +{ + EnsureTopLevelsDeleted e; + // Test detaching too, and check if the window size is correct + // TODO +} + +void TestCommon::tst_dockFloatingWindowNested() +{ + EnsureTopLevelsDeleted e; + // TODO +} + +void TestCommon::tst_crash() +{ + // tests some crash I got + + EnsureTopLevelsDeleted e; + { + // 1. Teste an assert I got + auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); + auto dock1 = createDockWidget("dock1", new QPushButton("one")); + auto dock2 = createDockWidget("dock2", new QPushButton("two")); + auto layout = m->multiSplitter(); + + m->addDockWidget(dock1, KDDockWidgets::Location_OnLeft); + Item *item1 = layout->itemForFrame(dock1->frame()); + dock1->addDockWidgetAsTab(dock2); + + dock1->setFloating(true); + Item *layoutItem = dock1->lastPositions().lastItem(); + QVERIFY(layoutItem && DockRegistry::self()->itemIsInMainWindow(layoutItem)); + QCOMPARE(layoutItem, item1); + + QCOMPARE(layout->placeholderCount(), 0); + QCOMPARE(layout->count(), 1); + + // Move from tab to bottom + m->addDockWidget(dock2, KDDockWidgets::Location_OnBottom); + + QCOMPARE(layout->count(), 2); + QCOMPARE(layout->placeholderCount(), 1); + + dock1->deleteLater(); + Testing::waitForDeleted(dock1); + } +} + #include "tst_common.moc" diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index a2d047cf..05485254 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -285,8 +285,6 @@ private Q_SLOTS: void tst_close(); void tst_preventClose(); void tst_closeAllDockWidgets(); - void tst_dockDockWidgetNested(); - void tst_dockFloatingWindowNested(); void tst_dockWindowWithTwoSideBySideFramesIntoCenter(); void tst_dockWindowWithTwoSideBySideFramesIntoLeft(); void tst_dockWindowWithTwoSideBySideFramesIntoRight(); @@ -306,9 +304,7 @@ private Q_SLOTS: void tst_fairResizeAfterRemoveWidget(); void tst_notClosable(); - void tst_clear(); void tst_constraintsAfterPlaceholder(); - void tst_crash(); // tests some crash I got void tst_crash2_data(); void tst_crash2(); void tst_setFloatingWhenWasTabbed(); @@ -336,12 +332,7 @@ private Q_SLOTS: void tst_negativeAnchorPositionWhenEmbedded(); void tst_availableSizeWithPlaceholders(); void tst_stealFrame(); - void tst_addAsPlaceholder(); - void tst_removeItem(); - void tst_startHidden(); - void tst_startClosed(); void tst_sizeConstraintWarning(); - void tst_samePositionAfterHideRestore(); void tst_anchorFollowingItselfAssert(); void tst_positionWhenShown(); void tst_restoreSimplest(); @@ -810,21 +801,6 @@ void TestDocks::tst_preventClose() QVERIFY(Testing::waitForDeleted(dock1)); } -void TestDocks::tst_dockDockWidgetNested() -{ - EnsureTopLevelsDeleted e; - // Test detaching too, and check if the window size is correct - - - // TODO -} - -void TestDocks::tst_dockFloatingWindowNested() -{ - EnsureTopLevelsDeleted e; - // TODO -} - void TestDocks::tst_dockWindowWithTwoSideBySideFramesIntoCenter() { EnsureTopLevelsDeleted e; @@ -1932,39 +1908,6 @@ void TestDocks::tst_constraintsAfterPlaceholder() Testing::waitForDeleted(dock1); } -void TestDocks::tst_crash() -{ - EnsureTopLevelsDeleted e; - { - // 1. Teste an assert I got - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("dock1", new QPushButton("one")); - auto dock2 = createDockWidget("dock2", new QPushButton("two")); - auto layout = m->multiSplitter(); - - m->addDockWidget(dock1, KDDockWidgets::Location_OnLeft); - Item *item1 = layout->itemForFrame(dock1->frame()); - dock1->addDockWidgetAsTab(dock2); - - dock1->setFloating(true); - Item *layoutItem = dock1->lastPositions().lastItem(); - QVERIFY(layoutItem && DockRegistry::self()->itemIsInMainWindow(layoutItem)); - QCOMPARE(layoutItem, item1); - - QCOMPARE(layout->placeholderCount(), 0); - QCOMPARE(layout->count(), 1); - - // Move from tab to bottom - m->addDockWidget(dock2, KDDockWidgets::Location_OnBottom); - - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - - dock1->deleteLater(); - Testing::waitForDeleted(dock1); - } -} - void TestDocks::tst_crash2_data() { QTest::addColumn("show"); @@ -3933,274 +3876,6 @@ void TestDocks::tst_stealFrame() dropArea2->checkSanity(); } -void TestDocks::tst_addAsPlaceholder() -{ - EnsureTopLevelsDeleted e; - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("dock1", new QPushButton("one"), {}, false); - auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); - - m->addDockWidget(dock1, Location_OnBottom); - m->addDockWidget(dock2, Location_OnTop, nullptr, AddingOption_StartHidden); - - auto dropArea = m->dropArea(); - MultiSplitter *layout = dropArea; - - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - QVERIFY(!dock2->isVisible()); - - dock2->show(); - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 0); - - layout->checkSanity(); - - // Cleanup - dock2->deleteLater(); - Testing::waitForDeleted(dock2); -} - -void TestDocks::tst_removeItem() -{ - // Tests that MultiSplitterLayout::removeItem() works - EnsureTopLevelsDeleted e; - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("dock1", new QPushButton("one")); - auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); - auto dock3 = createDockWidget("dock3", new QPushButton("three")); - - m->addDockWidget(dock1, Location_OnBottom); - m->addDockWidget(dock2, Location_OnTop, nullptr, AddingOption_StartHidden); - Item *item2 = dock2->lastPositions().lastItem(); - - auto dropArea = m->dropArea(); - MultiSplitter *layout = dropArea; - - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - - // 1. Remove an item that's a placeholder - - layout->removeItem(item2); - - QCOMPARE(layout->count(), 1); - QCOMPARE(layout->placeholderCount(), 0); - - // 2. Remove an item that has an actual widget - Item *item1 = dock1->lastPositions().lastItem(); - layout->removeItem(item1); - QCOMPARE(layout->count(), 0); - QCOMPARE(layout->placeholderCount(), 0); - - // 3. Remove an item that has anchors following one of its other anchors (Tests that anchors stop following) - // Stack 1, 2, 3 - m->addDockWidget(dock3, Location_OnBottom); - m->addDockWidget(dock2, Location_OnBottom); - m->addDockWidget(dock1, Location_OnBottom); - QCOMPARE(layout->count(), 3); - QCOMPARE(layout->placeholderCount(), 0); - - dock2->close(); - auto frame1 = dock1->frame(); - dock1->close(); - QVERIFY(Testing::waitForDeleted(frame1)); - - QCOMPARE(layout->count(), 3); - QCOMPARE(layout->placeholderCount(), 2); - - // Now remove the items - layout->removeItem(dock2->lastPositions().lastItem()); - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - layout->checkSanity(); - layout->removeItem(dock1->lastPositions().lastItem()); - QCOMPARE(layout->count(), 1); - QCOMPARE(layout->placeholderCount(), 0); - - // Add again - m->addDockWidget(dock2, Location_OnBottom); - m->addDockWidget(dock1, Location_OnBottom); - dock2->close(); - frame1 = dock1->frame(); - dock1->close(); - QVERIFY(Testing::waitForDeleted(frame1)); - - // Now remove the items, but first dock1 - layout->removeItem(dock1->lastPositions().lastItem()); - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - layout->checkSanity(); - layout->removeItem(dock2->lastPositions().lastItem()); - QCOMPARE(layout->count(), 1); - QCOMPARE(layout->placeholderCount(), 0); - layout->checkSanity(); - - // Add again, stacked as 1, 2, 3, then close 2 and 3. - m->addDockWidget(dock2, Location_OnTop); - m->addDockWidget(dock1, Location_OnTop); - - auto frame2 = dock2->frame(); - dock2->close(); - Testing::waitForDeleted(frame2); - - auto frame3 = dock3->frame(); - dock3->close(); - Testing::waitForDeleted(frame3); - - // The second anchor is now following the 3rd, while the 3rd is following 'bottom' - layout->removeItem(dock3->lastPositions().lastItem()); // will trigger the 3rd anchor to be removed - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - layout->checkSanity(); - - dock1->deleteLater(); - dock2->deleteLater(); - dock3->deleteLater(); - Testing::waitForDeleted(dock3); -} - -void TestDocks::tst_startHidden() -{ - EnsureTopLevelsDeleted e; - { - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("dock1", new QPushButton("one"), {}, false); - auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); - - auto dropArea = m->dropArea(); - MultiSplitter *layout = dropArea; - - m->addDockWidget(dock1, Location_OnTop, nullptr, AddingOption_StartHidden); - QVERIFY(layout->checkSanity()); - - QCOMPARE(layout->count(), 1); - QCOMPARE(layout->placeholderCount(), 1); - - m->addDockWidget(dock2, Location_OnTop); - QVERIFY(layout->checkSanity()); - - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - - qDebug() << dock1->isVisible(); - dock1->show(); - - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 0); - - Testing::waitForResize(dock2); - } - - { - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("dock1", new QPushButton("one"), {}, false); - auto dock2 = createDockWidget("dock2", new QPushButton("two"), {}, false); - auto dock3 = createDockWidget("dock3", new QPushButton("three"), {}, false); - - auto dropArea = m->dropArea(); - MultiSplitter *layout = dropArea; - m->addDockWidget(dock1, Location_OnLeft, nullptr, AddingOption_StartHidden); - - m->addDockWidget(dock2, Location_OnBottom, nullptr, AddingOption_StartHidden); - m->addDockWidget(dock3, Location_OnRight, nullptr, AddingOption_StartHidden); - - dock1->show(); - - QCOMPARE(layout->count(), 3); - QCOMPARE(layout->placeholderCount(), 2); - - dock2->show(); - dock3->show(); - Testing::waitForResize(dock2); - layout->checkSanity(); - } -} - -void TestDocks::tst_startClosed() -{ - EnsureTopLevelsDeleted e; - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("dock1", new QPushButton("one")); - auto dock2 = createDockWidget("dock2", new QPushButton("two")); - - auto dropArea = m->dropArea(); - MultiSplitter *layout = dropArea; - - m->addDockWidget(dock1, Location_OnTop); - Frame *frame1 = dock1->frame(); - dock1->close(); - Testing::waitForDeleted(frame1); - - QCOMPARE(layout->count(), 1); - QCOMPARE(layout->placeholderCount(), 1); - - m->addDockWidget(dock2, Location_OnTop); - - layout->checkSanity(); - - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 1); - - dock1->show(); - QCOMPARE(layout->count(), 2); - QCOMPARE(layout->placeholderCount(), 0); -} - -void TestDocks::tst_samePositionAfterHideRestore() -{ - EnsureTopLevelsDeleted e; - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("1", new QPushButton("1")); - auto dock2 = createDockWidget("2", new QPushButton("2")); - auto dock3 = createDockWidget("3", new QPushButton("3")); - - m->addDockWidget(dock1, Location_OnLeft); - m->addDockWidget(dock2, Location_OnRight); - m->addDockWidget(dock3, Location_OnRight); - QRect geo2 = dock2->frame()->QWidget::geometry(); - dock2->setFloating(true); - - auto fw2 = dock2->floatingWindow(); - dock2->setFloating(false); - QVERIFY(Testing::waitForDeleted(fw2)); - QCOMPARE(geo2, dock2->frame()->QWidget::geometry()); - m->multiSplitter()->checkSanity(); -} - - -void TestDocks::tst_clear() -{ - // Tests MultiSplitterLayout::clear() - EnsureTopLevelsDeleted e; - QCOMPARE(Frame::dbg_numFrames(), 0); - - auto m = createMainWindow(QSize(800, 500), MainWindowOption_None); - auto dock1 = createDockWidget("1", new QPushButton("1")); - auto dock2 = createDockWidget("2", new QPushButton("2")); - auto dock3 = createDockWidget("3", new QPushButton("3")); - auto fw3 = dock3->floatingWindow(); - - m->addDockWidget(dock1, Location_OnLeft); - m->addDockWidget(dock2, Location_OnRight); - m->addDockWidget(dock3, Location_OnRight); - QVERIFY(Testing::waitForDeleted(fw3)); - dock3->close(); - - QCOMPARE(Frame::dbg_numFrames(), 3); - - auto layout = m->multiSplitter(); - layout->rootItem()->clear(); - - QCOMPARE(layout->count(), 0); - QCOMPARE(layout->placeholderCount(), 0); - layout->checkSanity(); - - // Cleanup - dock3->deleteLater(); - QVERIFY(Testing::waitForDeleted(dock3)); -} - void TestDocks::tst_restoreEmbeddedMainWindow() { EnsureTopLevelsDeleted e;