chart2/qa/extras/uichart.cxx                             |    6 
 desktop/qa/desktop_lib/test_desktop_lib.cxx              |    2 
 sc/qa/unit/jumbosheets-test.cxx                          |    4 
 sc/qa/unit/tiledrendering/tiledrendering.cxx             |   37 +++++
 sc/qa/unit/uicalc/uicalc.cxx                             |   81 ++++++++++++
 sd/qa/unit/tiledrendering/LOKitSearchTest.cxx            |    2 
 sd/qa/unit/tiledrendering/tiledrendering.cxx             |   33 +++++
 sd/qa/unit/uiimpress.cxx                                 |   45 ++++++
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |    2 
 sw/qa/extras/layout/layout.cxx                           |    2 
 sw/qa/extras/tiledrendering/tiledrendering.cxx           |    4 
 sw/qa/extras/uiwriter/uiwriter.cxx                       |    2 
 sw/qa/extras/uiwriter/uiwriter2.cxx                      |   16 ++
 sw/qa/extras/uiwriter/uiwriter3.cxx                      |   97 +++++++++++++++
 sw/qa/extras/uiwriter/uiwriter4.cxx                      |   10 +
 sw/qa/extras/uiwriter/uiwriter5.cxx                      |   14 ++
 sw/qa/extras/uiwriter/uiwriter6.cxx                      |   16 ++
 sw/qa/extras/uiwriter/uiwriter7.cxx                      |    3 
 sw/qa/extras/uiwriter/uiwriter8.cxx                      |   79 ++++++++++++
 unotest/Library_unotest.mk                               |    1 
 unotest/source/cpp/macros_test.cxx                       |    6 
 21 files changed, 456 insertions(+), 6 deletions(-)

New commits:
commit 4df2a951b05197448e310cb003449658e52b45fb
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Fri Mar 24 12:43:12 2023 +0000
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Mar 24 15:09:41 2023 +0000

    Revert "qa: call ProcessEventsToIdle inside dispatchCommand"
    
    This reverts commit 1029afe2fa49a3a326ca529a68e99e2a7239a395.
    
    number of failures in CppunitTest_sc_uicalc has increased since
    this patch was backported. reverting it to find out for sure whether
    this introduced it or not
    
    Change-Id: I670412d9445aee5ca2d65f647a82b993682d088f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149518
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/chart2/qa/extras/uichart.cxx b/chart2/qa/extras/uichart.cxx
index 4b5db209a742..ec250f80bb27 100644
--- a/chart2/qa/extras/uichart.cxx
+++ b/chart2/qa/extras/uichart.cxx
@@ -47,13 +47,16 @@ void 
Chart2UiChartTest::testCopyPasteToNewSheet(uno::Reference<chart::XChartDocu
         comphelper::makePropertyValue("ToObject", aObjectName),
     };
     dispatchCommand(mxComponent, ".uno:GoToObject", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // create a new document
     load("private:factory/scalc");
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     uno::Reference<chart2::XChartDocument> xChartDoc2 = 
getChartDocFromSheet(0, mxComponent);
     CPPUNIT_ASSERT(xChartDoc2.is());
@@ -137,13 +140,16 @@ CPPUNIT_TEST_FIXTURE(Chart2UiChartTest, testTdf151091)
         comphelper::makePropertyValue("ToObject", OUString("Object 1")),
     };
     dispatchCommand(mxComponent, ".uno:GoToObject", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // create a new writer document
     load("private:factory/swriter");
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     aSeriesList = getWriterChartColumnDescriptions(mxComponent);
 
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx 
b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index d7108977aae2..5af044e67523 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -606,6 +606,7 @@ void DesktopLOKTest::testSearchCalc()
         {"SearchItem.Command", 
uno::Any(static_cast<sal_uInt16>(SvxSearchCmd::FIND_ALL))},
     }));
     dispatchCommand(mxComponent, ".uno:ExecuteSearch", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     std::vector<OString> aSelections;
     sal_Int32 nIndex = 0;
@@ -636,6 +637,7 @@ void DesktopLOKTest::testSearchAllNotificationsCalc()
         {"SearchItem.Command", 
uno::Any(static_cast<sal_uInt16>(SvxSearchCmd::FIND_ALL))},
     }));
     dispatchCommand(mxComponent, ".uno:ExecuteSearch", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     // This was 1, make sure that we get no notifications about selection 
changes during search.
     CPPUNIT_ASSERT_EQUAL(0, m_nSelectionBeforeSearchResult);
diff --git a/sc/qa/unit/jumbosheets-test.cxx b/sc/qa/unit/jumbosheets-test.cxx
index 0dec10967751..05b2c2248650 100644
--- a/sc/qa/unit/jumbosheets-test.cxx
+++ b/sc/qa/unit/jumbosheets-test.cxx
@@ -272,10 +272,12 @@ void ScJumboSheetsTest::testTdf134553()
     pViewShell->SelectObject(u"Diagram 1");
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), pPage->GetObjCount());
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     pOleObj = pPage->GetObj(0);
     CPPUNIT_ASSERT(pOleObj);
@@ -315,8 +317,10 @@ void ScJumboSheetsTest::testTdf147509()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), ScDocShell::GetViewData()->GetCurY());
 
     dispatchCommand(mxComponent, ".uno:SelectColumn", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:InsertColumnsAfter", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("A"), pDoc->GetString(ScAddress(0, 0, 0)));
 
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx 
b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index b7dd40111a90..fb8af68bdd7e 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -768,6 +768,7 @@ void ScTiledRenderingTest::testTextViewSelection()
     // Create a selection on two cells in the second view, that's a text 
selection in LOK terms.
     aView1.m_bTextViewSelectionInvalidated = false;
     dispatchCommand(mxComponent, ".uno:GoRightSel", {});
+    Scheduler::ProcessEventsToIdle();
     // Make sure the first view got its notification.
     CPPUNIT_ASSERT(aView1.m_bTextViewSelectionInvalidated);
 }
@@ -784,6 +785,7 @@ void ScTiledRenderingTest::testDocumentSizeChanged()
         comphelper::makePropertyValue("ToPoint", OUString("$A$30")),
     };
     dispatchCommand(mxComponent, ".uno:GoToCell", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
     // Assert that the size in the payload is not 0.
     CPPUNIT_ASSERT(m_aDocumentSize.getWidth() > 0);
     CPPUNIT_ASSERT(m_aDocumentSize.getHeight() > 0);
@@ -856,6 +858,7 @@ void ScTiledRenderingTest::testMoveShapeHandle()
             {"NewPosY", uno::Any(y+1)}
         }));
         dispatchCommand(mxComponent, ".uno:MoveShapeHandle", aPropertyValues);
+        Scheduler::ProcessEventsToIdle();
         CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty());
         lcl_extractHandleParameters(aView1.m_ShapeSelection, id, x ,y);
         CPPUNIT_ASSERT_EQUAL(x-1, oldX);
@@ -1078,6 +1081,7 @@ void ScTiledRenderingTest::testAutoSum()
 
     uno::Sequence<beans::PropertyValue> aArgs;
     dispatchCommand(mxComponent, ".uno:AutoSum", aArgs);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView.m_sCellFormula.startsWith("=SUM("));
 }
 
@@ -1097,6 +1101,7 @@ void ScTiledRenderingTest::testHideColRow()
             }));
 
         dispatchCommand(mxComponent, ".uno:SelectColumn", aArgs2);
+        Scheduler::ProcessEventsToIdle();
     }
 
     SCCOL nOldCurX = ScDocShell::GetViewData()->GetCurX();
@@ -1104,6 +1109,7 @@ void ScTiledRenderingTest::testHideColRow()
     {
         uno::Sequence<beans::PropertyValue> aArgs;
         dispatchCommand(mxComponent, ".uno:HideColumn", aArgs);
+        Scheduler::ProcessEventsToIdle();
     }
 
     SCCOL nNewCurX = ScDocShell::GetViewData()->GetCurX();
@@ -1122,6 +1128,7 @@ void ScTiledRenderingTest::testHideColRow()
                 { "Modifier", uno::Any(sal_uInt16(0)) }
             }));
         dispatchCommand(mxComponent, ".uno:SelectRow", aArgs2);
+        Scheduler::ProcessEventsToIdle();
     }
 
     nOldCurX = ScDocShell::GetViewData()->GetCurX();
@@ -1129,6 +1136,7 @@ void ScTiledRenderingTest::testHideColRow()
     {
         uno::Sequence<beans::PropertyValue> aArgs;
         dispatchCommand(mxComponent, ".uno:HideRow", aArgs);
+        Scheduler::ProcessEventsToIdle();
     }
     nNewCurX = ScDocShell::GetViewData()->GetCurX();
     nNewCurY = ScDocShell::GetViewData()->GetCurY();
@@ -1167,6 +1175,7 @@ void 
ScTiledRenderingTest::testInvalidateOnCopyPasteCells()
     // paste cells
     aView.m_bInvalidateTiles = false;
     dispatchCommand(mxComponent, ".uno:Paste", aArgs);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
 }
 
@@ -1191,6 +1200,7 @@ void ScTiledRenderingTest::testInvalidateOnInserRowCol()
     aView.m_bInvalidateTiles = false;
     aView.m_aInvalidations.clear();
     dispatchCommand(mxComponent, ".uno:InsertRows", aArgs);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
     CPPUNIT_ASSERT_EQUAL(size_t(2), aView.m_aInvalidations.size());
     CPPUNIT_ASSERT_EQUAL(tools::Rectangle(-75, 51240, 32212230, 63990), 
aView.m_aInvalidations[0]);
@@ -1207,6 +1217,7 @@ void ScTiledRenderingTest::testInvalidateOnInserRowCol()
     aView.m_bInvalidateTiles = false;
     aView.m_aInvalidations.clear();
     dispatchCommand(mxComponent, ".uno:InsertColumns", aArgs);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
     CPPUNIT_ASSERT_EQUAL(size_t(2), aView.m_aInvalidations.size());
     CPPUNIT_ASSERT_EQUAL(tools::Rectangle(254925, -15, 32212230, 63990), 
aView.m_aInvalidations[0]);
@@ -1236,6 +1247,7 @@ void ScTiledRenderingTest::testCommentCallback()
             {"Author", uno::Any(OUString("LOK User1"))},
         }));
         dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+        Scheduler::ProcessEventsToIdle();
 
         // We received a LOK_CALLBACK_COMMENT callback with comment 'Add' 
action
         CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1266,6 +1278,7 @@ void ScTiledRenderingTest::testCommentCallback()
             {"Author", uno::Any(OUString("LOK User2"))},
         });
         dispatchCommand(mxComponent, ".uno:EditAnnotation", aArgs);
+        Scheduler::ProcessEventsToIdle();
 
         // We received a LOK_CALLBACK_COMMENT callback with comment 'Modify' 
action
         CPPUNIT_ASSERT_EQUAL(std::string("Modify"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1287,6 +1300,7 @@ void ScTiledRenderingTest::testCommentCallback()
             {"Id", uno::Any(OUString::createFromAscii(aCommentId.c_str()))}
         });
         dispatchCommand(mxComponent, ".uno:DeleteNote", aArgs);
+        Scheduler::ProcessEventsToIdle();
 
         // We received a LOK_CALLBACK_COMMENT callback with comment 'Remove' 
action
         CPPUNIT_ASSERT_EQUAL(std::string("Remove"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1330,12 +1344,14 @@ void ScTiledRenderingTest::testUndoLimiting()
     // try to execute undo in view #2
     SfxLokHelper::setView(nView2);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that undo has not been executed on view #2
     CPPUNIT_ASSERT_EQUAL(std::size_t(1), pUndoManager->GetUndoActionCount());
 
     // try to execute undo in view #1
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that undo has been executed on view #1
     CPPUNIT_ASSERT_EQUAL(std::size_t(0), pUndoManager->GetUndoActionCount());
 
@@ -1345,12 +1361,14 @@ void ScTiledRenderingTest::testUndoLimiting()
     // try to execute redo in view #2
     SfxLokHelper::setView(nView2);
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that redo has not been executed on view #2
     CPPUNIT_ASSERT_EQUAL(std::size_t(1), pUndoManager->GetRedoActionCount());
 
     // try to execute redo in view #1
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that redo has been executed on view #1
     CPPUNIT_ASSERT_EQUAL(std::size_t(0), pUndoManager->GetRedoActionCount());
 }
@@ -1388,6 +1406,7 @@ void ScTiledRenderingTest::testUndoRepairDispatch()
     // try to execute undo in view #2
     SfxLokHelper::setView(nView2);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that undo has not been executed on view #2
     CPPUNIT_ASSERT_EQUAL(std::size_t(1), pUndoManager->GetUndoActionCount());
 
@@ -1398,6 +1417,7 @@ void ScTiledRenderingTest::testUndoRepairDispatch()
         {"Repair", uno::Any(true)}
     }));
     dispatchCommand(mxComponent, ".uno:Undo", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
     // check that undo has been executed on view #2 in repair mode
     CPPUNIT_ASSERT_EQUAL(std::size_t(0), pUndoManager->GetUndoActionCount());
 }
@@ -1427,12 +1447,14 @@ void 
ScTiledRenderingTest::testInsertGraphicInvalidations()
             { "FileName", uno::Any(createFileURL(u"smile.png")) }
         }));
     dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
 
     // undo image insertion in view and see if both views are invalidated
     aView.m_bInvalidateTiles = false;
     uno::Sequence<beans::PropertyValue> aArgs2;
     dispatchCommand(mxComponent, ".uno:Undo", aArgs2);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
 }
 
@@ -1930,6 +1952,7 @@ void 
ScTiledRenderingTest::testInsertDeletePageInvalidation()
             { "Index", uno::Any(sal_Int32(1)) }
         }));
     dispatchCommand(mxComponent, ".uno:Insert", aArgs);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView1.m_bInvalidateTiles);
     CPPUNIT_ASSERT_EQUAL(size_t(6), aView1.m_aInvalidations.size());
     CPPUNIT_ASSERT_EQUAL(tools::Rectangle(0, 0, 1000000000, 1000000000), 
aView1.m_aInvalidations[0]);
@@ -1942,6 +1965,7 @@ void 
ScTiledRenderingTest::testInsertDeletePageInvalidation()
             { "Index", uno::Any(sal_Int32(1)) }
         }));
     dispatchCommand(mxComponent, ".uno:Remove", aArgs2);
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView1.m_bInvalidateTiles);
     CPPUNIT_ASSERT_EQUAL(size_t(5), aView1.m_aInvalidations.size());
     CPPUNIT_ASSERT_EQUAL(tools::Rectangle(0, 0, 1000000000, 1000000000), 
aView1.m_aInvalidations[0]);
@@ -2755,6 +2779,7 @@ void ScTiledRenderingTest::testSheetViewDataCrash()
             { "Index", uno::Any(sal_Int32(2)) }
         }));
     dispatchCommand(mxComponent, ".uno:Insert", aArgs);
+    Scheduler::ProcessEventsToIdle();
     pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::PAGEDOWN | 
KEY_MOD1);
     pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::PAGEDOWN | 
KEY_MOD1);
     Scheduler::ProcessEventsToIdle();
@@ -2789,6 +2814,7 @@ void ScTiledRenderingTest::testTextBoxInsert()
             { "CreateDirectly",  uno::Any(true) }
         }));
     dispatchCommand(mxComponent, ".uno:DrawText", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // check if we have textbox selected
     CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty());
@@ -2826,6 +2852,7 @@ void ScTiledRenderingTest::testCommentCellCopyPaste()
             {"Author", uno::Any(OUString("LOK Client"))},
         }));
         dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+        Scheduler::ProcessEventsToIdle();
 
         // We received a LOK_CALLBACK_COMMENT callback with comment 'Add' 
action
         CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView.m_aCommentCallbackResult.get<std::string>("action"));
@@ -2842,10 +2869,12 @@ void ScTiledRenderingTest::testCommentCellCopyPaste()
         // Single cell(with comment) copy paste test
         {
             dispatchCommand(mxComponent, ".uno:Copy", aCopyPasteArgs);
+            Scheduler::ProcessEventsToIdle();
 
             pTabViewShell->SetCursor(1, 49);
             Scheduler::ProcessEventsToIdle();
             dispatchCommand(mxComponent, ".uno:Paste", aCopyPasteArgs); // 
Paste to cell B50
+            Scheduler::ProcessEventsToIdle();
 
             // We received a LOK_CALLBACK_COMMENT callback with comment 'Add' 
action
             CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView.m_aCommentCallbackResult.get<std::string>("action"));
@@ -2872,10 +2901,12 @@ void ScTiledRenderingTest::testCommentCellCopyPaste()
             Scheduler::ProcessEventsToIdle();
 
             dispatchCommand(mxComponent, ".uno:Copy", aCopyPasteArgs);
+            Scheduler::ProcessEventsToIdle();
 
             pTabViewShell->SetCursor(3, 49);
             Scheduler::ProcessEventsToIdle();
             dispatchCommand(mxComponent, ".uno:Paste", aCopyPasteArgs); // 
Paste to cell D50
+            Scheduler::ProcessEventsToIdle();
 
             // We received a LOK_CALLBACK_COMMENT callback with comment 'Add' 
action
             CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView.m_aCommentCallbackResult.get<std::string>("action"));
@@ -2915,6 +2946,7 @@ void ScTiledRenderingTest::testInvalidEntrySave()
 
     uno::Sequence<beans::PropertyValue> aArgs;
     dispatchCommand(mxComponent, ".uno:Save", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("Should not be marked modified after save", 
!pDocSh->IsModified());
 
@@ -2978,12 +3010,14 @@ void ScTiledRenderingTest::testUndoReordering()
     // try to execute undo in view #1
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that undo has been executed on view #1
     CPPUNIT_ASSERT_EQUAL(std::size_t(1), pUndoManager->GetUndoActionCount());
 
     // try to execute undo in view #2
     SfxLokHelper::setView(nView2);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     // check that undo has been executed on view #2
     CPPUNIT_ASSERT_EQUAL(std::size_t(0), pUndoManager->GetUndoActionCount());
 }
@@ -3053,6 +3087,7 @@ void ScTiledRenderingTest::testUndoReorderingRedo()
     // View 1 presses undo, and the second cell is erased
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(std::size_t(2), pUndoManager->GetUndoActionCount());
     CPPUNIT_ASSERT_EQUAL(OUString("xx"), pDoc->GetString(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetString(ScAddress(0, 1, 0)));
@@ -3072,6 +3107,7 @@ void ScTiledRenderingTest::testUndoReorderingRedo()
 
     // View 1 presses undo again, and the first cell is erased
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(std::size_t(1), pUndoManager->GetUndoActionCount());
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetString(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetString(ScAddress(0, 1, 0)));
@@ -3141,6 +3177,7 @@ void ScTiledRenderingTest::testUndoReorderingMulti()
     // View 1 presses undo
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(std::size_t(2), pUndoManager->GetUndoActionCount());
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetString(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_EQUAL(OUString("CC"), pDoc->GetString(ScAddress(0, 2, 0)));
diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx
index 98d3398b09d8..25b4d0790383 100644
--- a/sc/qa/unit/uicalc/uicalc.cxx
+++ b/sc/qa/unit/uicalc/uicalc.cxx
@@ -298,10 +298,12 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf103994)
     goToCell("A1");
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("B1");
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have failed with
     // - Expected: ='file:///tmp/lu124171irlmb.tmp'#$Sheet1.A1
@@ -386,9 +388,11 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
 
     goToCell("A1");
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("A2");
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", 
pDoc->HasNote(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A2", 
pDoc->HasNote(ScAddress(0, 1, 0)));
@@ -396,8 +400,10 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
     goToCell("A1");
 
     dispatchCommand(mxComponent, ".uno:SelectRow", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:DeleteRows", {});
+    Scheduler::ProcessEventsToIdle();
 
     for (size_t i = 0; i < 10; ++i)
     {
@@ -406,6 +412,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
         CPPUNIT_ASSERT_MESSAGE("There should be no note on A2", 
!pDoc->HasNote(ScAddress(0, 1, 0)));
 
         dispatchCommand(mxComponent, ".uno:Undo", {});
+        Scheduler::ProcessEventsToIdle();
 
         CPPUNIT_ASSERT_EQUAL(OUString("A"), pDoc->GetString(ScAddress(0, 0, 
0)));
         CPPUNIT_ASSERT_EQUAL(OUString("B"), pDoc->GetString(ScAddress(0, 1, 
0)));
@@ -413,15 +420,19 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
         CPPUNIT_ASSERT_MESSAGE("There should be a note on A2", 
pDoc->HasNote(ScAddress(0, 1, 0)));
 
         dispatchCommand(mxComponent, ".uno:Redo", {});
+        Scheduler::ProcessEventsToIdle();
     }
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("A1:A2");
 
     dispatchCommand(mxComponent, ".uno:SelectRow", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:DeleteRows", {});
+    Scheduler::ProcessEventsToIdle();
 
     for (size_t i = 0; i < 10; ++i)
     {
@@ -431,6 +442,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
         CPPUNIT_ASSERT_MESSAGE("There should be no note on A2", 
!pDoc->HasNote(ScAddress(0, 1, 0)));
 
         dispatchCommand(mxComponent, ".uno:Undo", {});
+        Scheduler::ProcessEventsToIdle();
 
         CPPUNIT_ASSERT_EQUAL(OUString("A"), pDoc->GetString(ScAddress(0, 0, 
0)));
         CPPUNIT_ASSERT_EQUAL(OUString("B"), pDoc->GetString(ScAddress(0, 1, 
0)));
@@ -438,6 +450,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107869)
         CPPUNIT_ASSERT_MESSAGE("There should be a note on A2", 
pDoc->HasNote(ScAddress(0, 1, 0)));
 
         dispatchCommand(mxComponent, ".uno:Redo", {});
+        Scheduler::ProcessEventsToIdle();
     }
 }
 
@@ -484,6 +497,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf63805)
     CPPUNIT_ASSERT_EQUAL(OUString("2014-05-31"), pDoc->GetString(ScAddress(0, 
19, 0)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("2012-10-31"), pDoc->GetString(ScAddress(0, 
0, 0)));
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetString(ScAddress(0, 1, 0)));
@@ -530,13 +544,16 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf94208)
     goToCell("A3:A8");
 
     dispatchCommand(mxComponent, ".uno:SelectRow", {});
+    Scheduler::ProcessEventsToIdle();
 
     //type Control-D/Fill Down
     dispatchCommand(mxComponent, ".uno:FillDown", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 0, 0)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have failed with
     // - Expected: 1
@@ -661,11 +678,13 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119162)
 
     // Without the fix in place, this test would have hung here
     dispatchCommand(mxComponent, ".uno:ChangeCaseRotateCase", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"Test" + OUStringChar(u'\xA')),
                          pDoc->GetString(ScAddress(0, 0, 0)));
 
     dispatchCommand(mxComponent, ".uno:ChangeCaseToLower", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"test" + OUStringChar(u'\xA')),
                          pDoc->GetString(ScAddress(0, 0, 0)));
@@ -689,6 +708,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf90579)
     goToCell("C1:C2");
 
     dispatchCommand(mxComponent, ".uno:ConvertFormulaToValue", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("2310"), pDoc->GetString(ScAddress(2, 0, 
0)));
     CPPUNIT_ASSERT_EQUAL(OUString("LibreOffice"), pDoc->GetString(ScAddress(2, 
1, 0)));
@@ -696,6 +716,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf90579)
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetFormula(2, 1, 0));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("2310"), pDoc->GetString(ScAddress(2, 0, 
0)));
     CPPUNIT_ASSERT_EQUAL(OUString("LibreOffice"), pDoc->GetString(ScAddress(2, 
1, 0)));
@@ -711,6 +732,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf124820)
     goToCell("B2");
 
     dispatchCommand(mxComponent, ".uno:Strikeout", {});
+    Scheduler::ProcessEventsToIdle();
 
     saveAndReload("Calc Office Open XML");
     pDoc = getScDoc();
@@ -733,6 +755,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119155)
 
     // Without the fix in place, this test would have hung here
     dispatchCommand(mxComponent, ".uno:ChangeCaseToTitleCase", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("Collagene Expert Targeted Wrinkle Corrector 
Unboxed 10 Ml"),
                          pDoc->GetString(ScAddress(2, 1, 0)));
@@ -755,6 +778,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf146795)
     goToCell("B2");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Move to B3
     ScModelObj* pModelObj = dynamic_cast<ScModelObj*>(mxComponent.get());
@@ -769,6 +793,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf146795)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("a"), pDoc->GetString(ScAddress(1, 1, 0)));
     CPPUNIT_ASSERT_EQUAL(OUString("a"), pDoc->GetString(ScAddress(1, 2, 0)));
@@ -799,6 +824,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf147744)
     goToCell("A2");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Move to A3
     ScModelObj* pModelObj = dynamic_cast<ScModelObj*>(mxComponent.get());
@@ -811,6 +837,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf147744)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 1, 0)));
     CPPUNIT_ASSERT_EQUAL(0.0, pDoc->GetValue(ScAddress(0, 2, 0)));
@@ -845,12 +872,14 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf138432)
     goToCell("A1");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("A2");
 
     typeString(u"=");
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     ScModelObj* pModelObj = dynamic_cast<ScModelObj*>(mxComponent.get());
     pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
@@ -1003,6 +1032,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf145640)
     goToCell("A2:F17");
 
     dispatchCommand(mxComponent, ".uno:SortDescending", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("=SUM(A15:B15:C15:D15:E15:F15)"), 
pDoc->GetFormula(6, 3, 0));
 
@@ -1012,6 +1042,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf145640)
     CPPUNIT_ASSERT_EQUAL(10.0, pDoc->GetValue(ScAddress(6, 3, 0)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("=SUM(A4:B4:C4:D4:E4:F4)"), 
pDoc->GetFormula(6, 3, 0));
     CPPUNIT_ASSERT_EQUAL(10.0, pDoc->GetValue(ScAddress(6, 3, 0)));
@@ -1039,10 +1070,12 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf97215)
 
     // Without the fix in place, this test would have hung here
     dispatchCommand(mxComponent, ".uno:SortAscending", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("Inserted at bottom"), 
pDoc->GetString(ScAddress(0, 0, 0)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("Inserted at bottom"), 
pDoc->GetString(ScAddress(0, 23, 0)));
 
@@ -1306,15 +1339,18 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf117706)
 
     // Use Adding Selection
     dispatchCommand(mxComponent, ".uno:StatusSelectionModeExp", {});
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("A1");
     dispatchCommand(mxComponent, ".uno:SelectRow", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:GoDown", {});
     dispatchCommand(mxComponent, ".uno:GoDown", {});
     lcl_AssertCurrentCursorPosition(*pDocSh, u"A3");
 
     dispatchCommand(mxComponent, ".uno:SelectRow", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
 
@@ -1370,11 +1406,14 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf149503)
     ScDocument* pDoc = getScDoc();
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     ScDPCollection* pDPs = pDoc->GetDPCollection();
     CPPUNIT_ASSERT_EQUAL(size_t(1), pDPs->GetCount());
@@ -1386,8 +1425,10 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf108292)
     ScDocument* pDoc = getScDoc();
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Open a new document
     createScDoc();
@@ -1395,6 +1436,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf108292)
 
     // Without the fix in place, this test would have crashed
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("2D"), pDoc->GetString(ScAddress(26, 0, 0)));
 }
@@ -1410,15 +1452,18 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testMultiRangeCol)
 
     // Use Adding Selection
     dispatchCommand(mxComponent, ".uno:StatusSelectionModeExp", {});
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("A1");
     dispatchCommand(mxComponent, ".uno:SelectColumn", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:GoRight", {});
     dispatchCommand(mxComponent, ".uno:GoRight", {});
     lcl_AssertCurrentCursorPosition(*pDocSh, u"C1");
 
     dispatchCommand(mxComponent, ".uno:SelectColumn", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
 
@@ -1724,12 +1769,14 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf108654)
     CPPUNIT_ASSERT_EQUAL(OUString("=VLOOKUP(C127,#REF!,D$1,0)"), aFormula);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(3, 126, 1);
     CPPUNIT_ASSERT_EQUAL(OUString(""), aFormula);
     CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(1), pDoc->GetTableCount());
 }
@@ -1791,16 +1838,19 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf133326)
     CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(0, 0, 1);
     CPPUNIT_ASSERT_EQUAL(OUString(""), aFormula);
     CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(1), pDoc->GetTableCount());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<SCTAB>(2), pDoc->GetTableCount());
     aFormula = pDoc->GetFormula(0, 0, 1);
@@ -1808,6 +1858,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf133326)
 
     // Without the fix in place, it would have crashed here
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(0, 0, 1);
     CPPUNIT_ASSERT_EQUAL(OUString("=RAND()*1000000"), aFormula);
@@ -1821,6 +1872,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf126685)
     ScDocument* pDoc = getScDoc();
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {}); // test should crash 
here without the fix
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(
         OUString("Control Height will change from 0.65 to 0.61 cm with 120dpi 
..."),
@@ -1858,11 +1910,13 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119793)
     Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5084), 
xShape->getPosition().X);
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1381), 
xShape->getPosition().Y);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have failed with
     // - Expected: 4984
@@ -1953,12 +2007,15 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf124818)
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage->GetObjCount());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), pPage->GetObjCount());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage->GetObjCount());
 }
@@ -2135,12 +2192,14 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf124822)
     CPPUNIT_ASSERT_EQUAL(OUString("X"), pDoc->GetString(ScAddress(0, 0, 2)));
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
 
     CPPUNIT_ASSERT_EQUAL(OUString(""), pDoc->GetString(ScAddress(0, 0, 2)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("X"), pDoc->GetString(ScAddress(0, 0, 2)));
 }
@@ -2172,6 +2231,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf118189)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(0, 77, 0);
     CPPUNIT_ASSERT_EQUAL(OUString("=FALSE()"), aFormula);
@@ -2215,11 +2275,13 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf118207)
     CPPUNIT_ASSERT_EQUAL(OUString("=FALSE()"), aFormula);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(1, 77, 0);
     CPPUNIT_ASSERT_EQUAL(OUString("=FALSE()"), aFormula);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(1, 77, 0);
     CPPUNIT_ASSERT_EQUAL(OUString(""), aFormula);
@@ -2227,6 +2289,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf118207)
     CPPUNIT_ASSERT_EQUAL(OUString(""), aFormula);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     aFormula = pDoc->GetFormula(0, 77, 0);
     CPPUNIT_ASSERT_EQUAL(OUString("=FALSE()"), aFormula);
@@ -2255,6 +2318,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf124778)
     uno::Sequence<beans::PropertyValue> aArgs
         = comphelper::InitPropertySequence({ { "Text", 
uno::Any(OUString("Comment")) } });
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", 
pDoc->HasNote(ScAddress(0, 0, 0)));
 
@@ -2279,6 +2343,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf138428)
     uno::Sequence<beans::PropertyValue> aArgs
         = comphelper::InitPropertySequence({ { "Text", 
uno::Any(OUString("Comment")) } });
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     ScDocument* pDoc = getScDoc();
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", 
pDoc->HasNote(ScAddress(0, 0, 0)));
@@ -2296,21 +2361,25 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf138428)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", 
pDoc->HasNote(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_MESSAGE("There shouldn't be a note on B1", 
!pDoc->HasNote(ScAddress(1, 0, 0)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("There shouldn't be a note on A1", 
!pDoc->HasNote(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_MESSAGE("There shouldn't be a note on B1", 
!pDoc->HasNote(ScAddress(1, 0, 0)));
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", 
pDoc->HasNote(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_MESSAGE("There shouldn't be a note on B1", 
!pDoc->HasNote(ScAddress(1, 0, 0)));
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_MESSAGE("There should be a note on A1", 
pDoc->HasNote(ScAddress(0, 0, 0)));
     CPPUNIT_ASSERT_MESSAGE("There should be a note on B1", 
pDoc->HasNote(ScAddress(1, 0, 0)));
@@ -2352,6 +2421,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf130614)
     lcl_SelectObjectByName(*getViewShell(), u"Object 1");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Open a new document
     createScDoc();
@@ -2359,6 +2429,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf130614)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
     SdrPage* pPage = pDrawLayer->GetPage(0);
@@ -2616,11 +2687,13 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf134675)
     goToCell("A:A");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Select column B to Z
     goToCell("B:Z");
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     for (size_t i = 1; i < 24; ++i)
     {
@@ -2719,6 +2792,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107952)
     goToCell("D10");
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have failed with
     // - Expected: 1
@@ -2729,6 +2803,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf107952)
     goToCell("D10");
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     lcl_AssertCurrentCursorPosition(*pDocSh, u"B1");
 }
@@ -2765,11 +2840,13 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf144022)
     goToCell("A5:B79");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     goToCell("D5");
 
     //Without the fix in place, this test would have crashed
     dispatchCommand(mxComponent, ".uno:PasteTransposed", {});
+    Scheduler::ProcessEventsToIdle();
 
     for (size_t i = 3; i < 76; ++i)
     {
@@ -2789,10 +2866,12 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf99386)
     goToCell("A1:B1");
 
     dispatchCommand(mxComponent, ".uno:ToggleMergeCells", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("0"), pDoc->GetString(ScAddress(1, 1, 0)));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("This"), pDoc->GetString(ScAddress(1, 0, 
0)));
 
@@ -2852,6 +2931,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf152014)
     goToCell("A1");
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Create a second document
     mxComponent2 = loadFromDesktop("private:factory/scalc");
@@ -2860,6 +2940,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf152014)
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xFrames->getCount());
 
     dispatchCommand(mxComponent2, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     ScModelObj* pModelObj2 = dynamic_cast<ScModelObj*>(mxComponent2.get());
     CPPUNIT_ASSERT(pModelObj2);
diff --git a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx 
b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx
index 2ba0a8f27848..f3beb12b3ce1 100644
--- a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx
+++ b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx
@@ -131,6 +131,7 @@ void LOKitSearchTest::lcl_search(const OUString& rKey, bool 
bFindAll, bool bBack
     }));
 
     dispatchCommand(mxComponent, ".uno:ExecuteSearch", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 }
 
 void LOKitSearchTest::lcl_replace(const OUString& rKey, const OUString& 
rReplace, bool bAll)
@@ -146,6 +147,7 @@ void LOKitSearchTest::lcl_replace(const OUString& rKey, 
const OUString& rReplace
     }));
 
     dispatchCommand(mxComponent, ".uno:ExecuteSearch", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 }
 
 namespace
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx 
b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index ad1c2564419b..67f81fa7be04 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -573,6 +573,7 @@ void SdTiledRenderingTest::testUndoShells()
         {"AttributePageSize.Height", uno::Any(static_cast<sal_Int32>(10000))},
     }));
     dispatchCommand(mxComponent, ".uno:AttributePageSize", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     // Assert that view shell ID tracking works for SdUndoAction subclasses.
     SdDrawDocument* pDocument = pXImpressDocument->GetDoc();
@@ -731,6 +732,7 @@ void SdTiledRenderingTest::testInsertTable()
     }));
 
     dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // get the table
     sd::ViewShell* pViewShell = 
pXImpressDocument->GetDocShell()->GetViewShell();
@@ -756,6 +758,7 @@ void SdTiledRenderingTest::testDeleteTable()
     }));
 
     dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
+    Scheduler::ProcessEventsToIdle();
     sd::ViewShell* pViewShell = 
pXImpressDocument->GetDocShell()->GetViewShell();
     SdrView* pSdrView = pViewShell->GetView();
     const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
@@ -1660,6 +1663,8 @@ void SdTiledRenderingTest::testTdf104405()
     uno::Sequence aArgs{ comphelper::makePropertyValue("PersistentCopy", true) 
};
     dispatchCommand(mxComponent, ".uno:FormatPaintbrush", aArgs);
 
+    Scheduler::ProcessEventsToIdle();
+
     // now click on the table
     pView->MarkObj(pTableObject, pView->GetSdrPageView());
     pTableObject->setActiveCell(sdr::table::CellPos(0,0));
@@ -1750,6 +1755,7 @@ void SdTiledRenderingTest::testTdf105502()
 
     // Grow font size for the selection.
     dispatchCommand(mxComponent, ".uno:Grow", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Assert that the selected A1 has now a larger font than the unselected
     // A2.
@@ -1799,6 +1805,7 @@ void SdTiledRenderingTest::testCommentCallbacks()
         {"Text", uno::Any(OUString("Comment"))},
     });
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // We received a LOK_CALLBACK_COMMENT callback with comment 'Add' action
     CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1823,6 +1830,7 @@ void SdTiledRenderingTest::testCommentCallbacks()
         {"Text", uno::Any(OUString("Reply to comment"))},
     });
     dispatchCommand(mxComponent, ".uno:ReplyToAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // We received a LOK_CALLBACK_COMMENT callback with comment 'Modify' action
     CPPUNIT_ASSERT_EQUAL(std::string("Modify"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1847,6 +1855,7 @@ void SdTiledRenderingTest::testCommentCallbacks()
         {"Text", uno::Any(OUString("Edited comment"))},
     });
     dispatchCommand(mxComponent, ".uno:EditAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // We received a LOK_CALLBACK_COMMENT callback with comment 'Modify' action
     CPPUNIT_ASSERT_EQUAL(std::string("Modify"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1864,6 +1873,7 @@ void SdTiledRenderingTest::testCommentCallbacks()
         {"Id", uno::Any(OUString::number(nComment1))},
     });
     dispatchCommand(mxComponent, ".uno:DeleteAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // We received a LOK_CALLBACK_COMMENT callback with comment 'Remove' action
     CPPUNIT_ASSERT_EQUAL(std::string("Remove"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
@@ -1895,6 +1905,7 @@ void SdTiledRenderingTest::testCommentChangeImpress()
         {"Text", uno::Any(OUString("Comment"))},
     });
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
 
@@ -1912,6 +1923,7 @@ void SdTiledRenderingTest::testCommentChangeImpress()
         {"PositionY", uno::Any(sal_Int32(20))}
     });
     dispatchCommand(mxComponent, ".uno:EditAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(std::string("Modify"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
     CPPUNIT_ASSERT_EQUAL(std::string("Comment"), 
aView1.m_aCommentCallbackResult.get<std::string>("text"));
@@ -1941,6 +1953,7 @@ void SdTiledRenderingTest::testCommentChangeDraw()
         {"Text", uno::Any(OUString("Comment"))},
     });
     dispatchCommand(mxComponent, ".uno:InsertAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(std::string("Add"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
 
@@ -1958,6 +1971,7 @@ void SdTiledRenderingTest::testCommentChangeDraw()
         {"PositionY", uno::Any(sal_Int32(20))}
     });
     dispatchCommand(mxComponent, ".uno:EditAnnotation", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(std::string("Modify"), 
aView1.m_aCommentCallbackResult.get<std::string>("action"));
     CPPUNIT_ASSERT_EQUAL(std::string("Comment"), 
aView1.m_aCommentCallbackResult.get<std::string>("text"));
@@ -1990,6 +2004,7 @@ void SdTiledRenderingTest::testMultiViewInsertDeletePage()
     // Insert slide in 1st view
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:InsertPage", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // See if the current slide number changed in 2nd view too
     SfxLokHelper::setView(nView2);
@@ -1998,6 +2013,7 @@ void SdTiledRenderingTest::testMultiViewInsertDeletePage()
     // Delete the page in 1st view now
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:DeletePage", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // See if current slide number changed in 2nd view too
     SfxLokHelper::setView(nView2);
@@ -2051,6 +2067,7 @@ void 
SdTiledRenderingTest::testMultiViewInsertDeletePage2()
     // Insert slide in 1st view
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:InsertPage", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // See if the current slide number changed in 2nd view too
     SfxLokHelper::setView(nView2);
@@ -2059,6 +2076,7 @@ void 
SdTiledRenderingTest::testMultiViewInsertDeletePage2()
     // Delete the page in 1st view now
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:DeletePage", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // See if current slide number changed in 2nd view too
     SfxLokHelper::setView(nView2);
@@ -2233,6 +2251,7 @@ void SdTiledRenderingTest::testLanguageAllText()
         { "Language", uno::Any(OUString("Default_English (USA)")) },
     });
     dispatchCommand(mxComponent, ".uno:LanguageStatus", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // Assert that the shape text language was changed.
     uno::Reference<drawing::XDrawPagesSupplier> 
xDrawPagesSupplier(mxComponent, uno::UNO_QUERY);
@@ -2325,6 +2344,7 @@ void SdTiledRenderingTest::testTdf115783()
         { "FontHeight.Height", uno::Any(static_cast<float>(12)) },
     });
     dispatchCommand(mxComponent, ".uno:FontHeight", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // Create a text selection on the B1 cell.
     pTableObject->setActiveCell(sdr::table::CellPos(1, 0));
@@ -2337,9 +2357,11 @@ void SdTiledRenderingTest::testTdf115783()
     // Copy selection, paste at the start of the cell.
     aArgs = {};
     dispatchCommand(mxComponent, ".uno:Copy", aArgs);
+    Scheduler::ProcessEventsToIdle();
     rEditView.SetSelection(ESelection(0, 0, 0, 0));
     aArgs = {};
     dispatchCommand(mxComponent, ".uno:Paste", aArgs);
+    Scheduler::ProcessEventsToIdle();
     pView->SdrEndTextEdit();
 
     // And now verify that the cell has the correct font size.
@@ -2399,6 +2421,7 @@ void SdTiledRenderingTest::testPasteTextOnSlide()
 
     // Copy some text
     dispatchCommand(mxComponent, ".uno:Copy", 
uno::Sequence<beans::PropertyValue>());
+    Scheduler::ProcessEventsToIdle();
 
     pXImpressDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, 
awt::Key::ESCAPE);
     pXImpressDocument->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::ESCAPE);
@@ -2406,6 +2429,7 @@ void SdTiledRenderingTest::testPasteTextOnSlide()
 
     // Paste onto the slide
     dispatchCommand(mxComponent, ".uno:Paste", 
uno::Sequence<beans::PropertyValue>());
+    Scheduler::ProcessEventsToIdle();
 
     pXImpressDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, 
awt::Key::ESCAPE);
     pXImpressDocument->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::ESCAPE);
@@ -2504,6 +2528,7 @@ void SdTiledRenderingTest::testCutSelectionChange()
 
     // Cut the selected text
     dispatchCommand(mxComponent, ".uno:Cut", 
uno::Sequence<beans::PropertyValue>());
+    Scheduler::ProcessEventsToIdle();
 
     // Selection is removed
     CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), m_aSelection.size());
@@ -2533,6 +2558,7 @@ void SdTiledRenderingTest::testRegenerateDiagram()
 
     // regenerate diagram
     dispatchCommand(mxComponent, ".uno:RegenerateDiagram", 
uno::Sequence<beans::PropertyValue>());
+    Scheduler::ProcessEventsToIdle();
 
     // diagram content (child shape count) should be the same as in the 
beginning
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), 
pActualPage->GetObj(0)->GetSubList()->GetObjCount());
@@ -2549,6 +2575,7 @@ void 
SdTiledRenderingTest::testInsertDeletePageInvalidation()
     aView1.m_bTilesInvalidated = false;
     aView1.m_aInvalidations.clear();
     dispatchCommand(mxComponent, ".uno:InsertPage", 
uno::Sequence<beans::PropertyValue>());
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView1.m_bTilesInvalidated);
     CPPUNIT_ASSERT_EQUAL(9, pXImpressDocument->getParts());
     CPPUNIT_ASSERT_EQUAL(size_t(9), aView1.m_aInvalidations.size());
@@ -2557,6 +2584,7 @@ void 
SdTiledRenderingTest::testInsertDeletePageInvalidation()
     aView1.m_bTilesInvalidated = false;
     aView1.m_aInvalidations.clear();
     dispatchCommand(mxComponent, ".uno:DeletePage", 
uno::Sequence<beans::PropertyValue>());
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT(aView1.m_bTilesInvalidated);
     CPPUNIT_ASSERT_EQUAL(8, pXImpressDocument->getParts());
     CPPUNIT_ASSERT_EQUAL(size_t(8), aView1.m_aInvalidations.size());
@@ -2605,6 +2633,7 @@ void SdTiledRenderingTest::testSlideDuplicateUndo()
     // Duplicate the first slide on view 1 and undo it.
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:DuplicatePage", {});
+    Scheduler::ProcessEventsToIdle();
     pXImpressDocument->setPart(0, /*bAllowChangeFocus=*/false);
     pXImpressDocument->setPart(1, /*bAllowChangeFocus=*/false);
     SfxLokHelper::setView(nView0);
@@ -2670,6 +2699,7 @@ void SdTiledRenderingTest::testMoveShapeHandle()
             {"NewPosY", uno::Any(y+1)}
         }));
         dispatchCommand(mxComponent, ".uno:MoveShapeHandle", aPropertyValues);
+        Scheduler::ProcessEventsToIdle();
         CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty());
         lcl_extractHandleParameters(aView1.m_ShapeSelection, id, x ,y);
         CPPUNIT_ASSERT_EQUAL(x-1, oldX);
@@ -2693,10 +2723,13 @@ void SdTiledRenderingTest::testPasteUndo()
     ESelection aWordSelection(0, 0, 0, 1); // "w" of "world"
     rEditView.SetSelection(aWordSelection);
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     // When undoing a paste:
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Then make sure the cursor position is still at the beginning:
     ESelection aSelection = rEditView.GetSelection();
diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx
index d193e45d0280..f85c977ee514 100644
--- a/sd/qa/unit/uiimpress.cxx
+++ b/sd/qa/unit/uiimpress.cxx
@@ -160,6 +160,7 @@ void SdUiImpressTest::lcl_search(const OUString& rKey, bool 
bFindAll, bool bBack
     }));
 
     dispatchCommand(mxComponent, ".uno:ExecuteSearch", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 }
 
 CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf111522)
@@ -262,6 +263,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf124708)
     createSdImpressDoc("tdf124708.ppt");
 
     dispatchCommand(mxComponent, ".uno:NextPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     checkCurrentPageNumber(2);
 
@@ -271,13 +273,16 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf124708)
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(16), pActualPage->GetObjCount());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), pActualPage->GetObjCount());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(16), pActualPage->GetObjCount());
 }
@@ -382,12 +387,16 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf139996)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:MovePageUp", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:MovePageDown", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:MovePageTop", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:MovePageBottom", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, rPageSelector.GetSelectedPageCount());
 }
@@ -432,6 +441,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf126605)
     createSdImpressDoc();
 
     dispatchCommand(mxComponent, ".uno:InsertPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     insertStringToObject(0, u"Test", /*bUseEscape*/ false);
 
@@ -458,11 +468,13 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf126605)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:ParaRightToLeft", {});
+    Scheduler::ProcessEventsToIdle();
 
     xPropSet->getPropertyValue("WritingMode") >>= nWritingMode;
     CPPUNIT_ASSERT_EQUAL(text::WritingMode2::RL_TB, nWritingMode);
 
     dispatchCommand(mxComponent, ".uno:ParaLeftToRight", {});
+    Scheduler::ProcessEventsToIdle();
 
     xPropSet->getPropertyValue("WritingMode") >>= nWritingMode;
     CPPUNIT_ASSERT_EQUAL(text::WritingMode2::LR_TB, nWritingMode);
@@ -473,12 +485,15 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf100950)
     createSdImpressDoc();
 
     dispatchCommand(mxComponent, ".uno:InsertPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:InsertPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     insertStringToObject(0, u"Test", /*bUseEscape*/ true);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     sd::slidesorter::SlideSorterViewShell* pSSVS = getSlideSorterViewShell();
     auto& rSSController = pSSVS->GetSlideSorter().GetController();
@@ -493,12 +508,15 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf129346)
     createSdImpressDoc();
 
     dispatchCommand(mxComponent, ".uno:DiaMode", {});
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(1);
 
     dispatchCommand(mxComponent, ".uno:InsertPage", {});
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(2);
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(1);
 }
 
@@ -516,6 +534,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testmoveSlides)
                                            { "IsPageObj", uno::Any(false) } 
}));
 
     dispatchCommand(mxComponent, ".uno:InsertPage", aArgs);
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(2);
 
     CPPUNIT_ASSERT_EQUAL(OUString("Test 1"), 
pViewShell->GetActualPage()->GetName());
@@ -526,6 +545,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testmoveSlides)
                                                { "IsPageObj", uno::Any(false) 
} });
 
     dispatchCommand(mxComponent, ".uno:InsertPage", aArgs);
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(3);
 
     CPPUNIT_ASSERT_EQUAL(OUString("Test 2"), 
pViewShell->GetActualPage()->GetName());
@@ -534,6 +554,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testmoveSlides)
     for (size_t i = 2; i > 0; --i)
     {
         dispatchCommand(mxComponent, ".uno:MovePageUp", {});
+        Scheduler::ProcessEventsToIdle();
         checkCurrentPageNumber(i);
         CPPUNIT_ASSERT_EQUAL(OUString("Test 2"), 
pViewShell->GetActualPage()->GetName());
     }
@@ -542,17 +563,20 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testmoveSlides)
     for (size_t i = 2; i < 4; ++i)
     {
         dispatchCommand(mxComponent, ".uno:MovePageDown", {});
+        Scheduler::ProcessEventsToIdle();
         checkCurrentPageNumber(i);
         CPPUNIT_ASSERT_EQUAL(OUString("Test 2"), 
pViewShell->GetActualPage()->GetName());
     }
 
     // Move slide 'Test 2' to the top
     dispatchCommand(mxComponent, ".uno:MovePageFirst", {});
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(1);
     CPPUNIT_ASSERT_EQUAL(OUString("Test 2"), 
pViewShell->GetActualPage()->GetName());
 
     // Move slide 'Test 2' to the bottom
     dispatchCommand(mxComponent, ".uno:MovePageLast", {});
+    Scheduler::ProcessEventsToIdle();
     checkCurrentPageNumber(3);
     CPPUNIT_ASSERT_EQUAL(OUString("Test 2"), 
pViewShell->GetActualPage()->GetName());
 }
@@ -586,42 +610,52 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf148620)
     uno::Sequence<beans::PropertyValue> aArgs(
         comphelper::InitPropertySequence({ { "KeyModifier", 
uno::Any(sal_Int32(0)) } }));
     dispatchCommand(mxComponent, ".uno:OutlineUp", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nThree\nFour\nsix\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineUp", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nThree\nsix\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineUp", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nsix\nThree\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineUp", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nsix\nTwo\nThree\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineUp", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"six\nOne\nTwo\nThree\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineDown", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nsix\nTwo\nThree\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineDown", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nsix\nThree\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineDown", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nThree\nsix\nFour\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineDown", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nThree\nFour\nsix\nFive"), 
xShape->getString());
 
     dispatchCommand(mxComponent, ".uno:OutlineDown", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString(u"One\nTwo\nThree\nFour\nFive\nsix"), 
xShape->getString());
 }
@@ -636,6 +670,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf141703)
         { { "Rows", uno::Any(sal_Int32(2)) }, { "Columns", 
uno::Any(sal_Int32(2)) } }));
 
     dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // Move to A1 using Alt + Tab and write 'A'
     for (int i = 0; i < 3; i++)
@@ -691,10 +726,12 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf127481)
         { { "Rows", uno::Any(sal_Int32(1)) }, { "Columns", 
uno::Any(sal_Int32(1)) } }));
 
     dispatchCommand(mxComponent, ".uno:InsertTable", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), pActualPage->GetObjCount());
 
     dispatchCommand(mxComponent, ".uno:DuplicatePage", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     checkCurrentPageNumber(2);
 
@@ -821,6 +858,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf38669)
     uno::Sequence<beans::PropertyValue> aArgs(
         comphelper::InitPropertySequence({ { "KeyModifier", uno::Any(KEY_MOD1) 
} }));
     dispatchCommand(mxComponent, ".uno:BasicShapes.rectangle", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     uno::Reference<drawing::XDrawPagesSupplier> 
xDrawPagesSupplier(mxComponent, uno::UNO_QUERY);
     uno::Reference<drawing::XDrawPage> 
xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
@@ -855,6 +893,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf151417)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Edit", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xDrawPage->getCount());
 }
@@ -869,6 +908,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf123841)
     uno::Sequence<beans::PropertyValue> aArgs(
         comphelper::InitPropertySequence({ { "KeyModifier", uno::Any(KEY_MOD1) 
} }));
     dispatchCommand(mxComponent, ".uno:Rect_Unfilled", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     uno::Reference<drawing::XDrawPagesSupplier> 
xDrawPagesSupplier(mxComponent, uno::UNO_QUERY);
     uno::Reference<drawing::XDrawPage> 
xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
@@ -955,11 +995,13 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testCharColorTheme)
     xController->select(uno::Any(xShape));
     Scheduler::ProcessEventsToIdle();
     dispatchCommand(mxComponent, ".uno:Text", {});
+    Scheduler::ProcessEventsToIdle();
     auto pImpressDocument = 
dynamic_cast<SdXImpressDocument*>(mxComponent.get());
     sd::ViewShell* pViewShell = 
pImpressDocument->GetDocShell()->GetViewShell();
     SdrView* pView = pViewShell->GetView();
     CPPUNIT_ASSERT(pView->IsTextEdit());
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     // When picking a theme color on the sidebar:
     uno::Sequence<beans::PropertyValue> aColorArgs = {
@@ -969,6 +1011,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testCharColorTheme)
         comphelper::makePropertyValue("ColorLumOff", 
static_cast<sal_Int16>(8000)),
     };
     dispatchCommand(mxComponent, ".uno:Color", aColorArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // Then make sure the theme "metadata" is set in the document model:
     pView->EndTextEditCurrentView();
@@ -1014,6 +1057,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testFillColorTheme)
         comphelper::makePropertyValue("ColorLumOff", 
static_cast<sal_Int16>(6000)),
     };
     dispatchCommand(mxComponent, ".uno:FillColor", aColorArgs);
+    Scheduler::ProcessEventsToIdle();
 
     // Then make sure the theme index is not lost when the sidebar sets it:
     sal_Int16 nFillColorTheme{};
@@ -1056,6 +1100,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf127696)
     createSdImpressDoc();
 
     dispatchCommand(mxComponent, ".uno:InsertPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     insertStringToObject(0, u"Test", /*bUseEscape*/ false);
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 235a5ccaf757..e412c8249a65 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -334,6 +334,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testOnlineNodeSplitAppend)
 
     // Undo second change
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(OUString("He heard quiet steps behind him. "),
                          getParagraph(1)->getString());
     CPPUNIT_ASSERT_EQUAL(OUString("That didn't bode well. Who could be 
following him this late at "
@@ -350,6 +351,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testOnlineNodeSplitAppend)
 
     // Undo first change
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2),
                          
pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
     CPPUNIT_ASSERT_EQUAL(
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index e926194560d5..587fa4d4294e 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -3691,6 +3691,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, 
testKeepWithNextPlusFlyFollowTextFlow)
     }
 
     dispatchCommand(mxComponent, ".uno:Fieldnames", {});
+    Scheduler::ProcessEventsToIdle();
 
     {
         xmlDocUniquePtr pXmlDoc = parseLayoutDump();
@@ -3708,6 +3709,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, 
testKeepWithNextPlusFlyFollowTextFlow)
     }
 
     dispatchCommand(mxComponent, ".uno:Fieldnames", {});
+    Scheduler::ProcessEventsToIdle();
 
     {
         xmlDocUniquePtr pXmlDoc = parseLayoutDump();
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx 
b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index 42e11ed6ca3d..cb5bb20d5365 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -1210,6 +1210,7 @@ CPPUNIT_TEST_FIXTURE(SwTiledRenderingTest, 
testUndoReordering)
     // When view 1 presses undo:
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Then make sure view 1's last undo action is invoked, out of order:
     // Without the accompanying fix in place, this test would have failed with:
@@ -1259,9 +1260,11 @@ CPPUNIT_TEST_FIXTURE(SwTiledRenderingTest, 
testUndoReorderingRedo)
     // When view 1 presses undo, twice:
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     // First just s(econd) is erased:
     CPPUNIT_ASSERT_EQUAL(OUString("f"), pTextNode1->GetText());
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Then make sure view 1's undo actions are invoked, out of order:
     // Without the accompanying fix in place, this test would have failed with:
@@ -1311,6 +1314,7 @@ CPPUNIT_TEST_FIXTURE(SwTiledRenderingTest, 
testUndoReorderingMulti)
     // When view 1 presses undo:
     SfxLokHelper::setView(nView1);
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Then make sure view 1's undo action is invoked, out of order:
     // Without the accompanying fix in place, this test would have failed with:
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx 
b/sw/qa/extras/uiwriter/uiwriter.cxx
index 47df30709462..5cad83ed7b0f 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -1480,6 +1480,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf137532)
     CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xCursor, 
"CharWeight"));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     xCursor.set(xText->createTextCursorByRange(getRun(getParagraph(1), 1)));
     CPPUNIT_ASSERT(xCursor.is());
@@ -1491,6 +1492,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf137532)
     CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xCursor, 
"CharWeight"));
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     xCursor.set(xText->createTextCursorByRange(getRun(getParagraph(1), 1)));
     CPPUNIT_ASSERT(xCursor.is());
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx 
b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 4292edfb2fdb..1ac7b41988d1 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -447,6 +447,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134250)
 
     // this would crash in 2 different ways
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
@@ -456,11 +457,13 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134250)
                          xTextContent->getAnchor()->getString());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
@@ -468,6 +471,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134250)
                          xTextContent->getAnchor()->getString());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
@@ -503,12 +507,14 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134436)
 
     // first, the section doesn't get deleted
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
     CPPUNIT_ASSERT_EQUAL(OUString(""), pWrtShell->GetCursor()->GetText());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
@@ -516,12 +522,14 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134436)
 
     // second, the section does get deleted because point is at the end
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xSections->getCount());
     CPPUNIT_ASSERT_EQUAL(OUString(""), pWrtShell->GetCursor()->GetText());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
@@ -529,18 +537,21 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134436)
 
     // the problem was that the section was not deleted on Redo
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xSections->getCount());
     CPPUNIT_ASSERT_EQUAL(OUString(""), pWrtShell->GetCursor()->GetText());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
     CPPUNIT_ASSERT_EQUAL(OUString("a\nb\n"), 
pWrtShell->GetCursor()->GetText());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xSections->getCount());
@@ -571,6 +582,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134252)
                          xCursor->getString());
 
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
@@ -578,6 +590,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134252)
 
     // this would crash
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount());
@@ -585,12 +598,14 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134252)
                          xCursor->getString());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
     CPPUNIT_ASSERT_EQUAL(OUString(""), xCursor->getString());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount());
@@ -598,6 +613,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf134252)
                          xCursor->getString());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
diff --git a/sw/qa/extras/uiwriter/uiwriter3.cxx 
b/sw/qa/extras/uiwriter/uiwriter3.cxx
index f81232ddca62..f0cbf7339937 100644
--- a/sw/qa/extras/uiwriter/uiwriter3.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter3.cxx
@@ -47,14 +47,17 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf145731)
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(9, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -67,29 +70,36 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf147199)
     CPPUNIT_ASSERT_EQUAL(7, getShapes());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(7, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(14, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(7, getShapes());
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(7, getShapes());
 }
@@ -101,13 +111,16 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf139843)
     int nPages = getPages();
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(nPages, getPages());
 }
@@ -118,8 +131,10 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf146848)
     createSwDoc("tdf77014.odt");
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, 
uno::UNO_QUERY);
     uno::Reference<container::XEnumerationAccess> xFieldsAccess(
@@ -129,6 +144,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf146848)
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     xFields = xFieldsAccess->createEnumeration();
 
@@ -149,24 +165,29 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf149507)
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -177,6 +198,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf114973)
     createSwDoc("tdf114973.fodt");
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     SwDoc* const pDoc = getSwDoc();
     SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
@@ -184,15 +206,18 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf114973)
     CPPUNIT_ASSERT(!pWrtShell->IsInHeaderFooter());
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     // check that hidden paragraphs at start and end are deleted
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(int(1), getParagraphs());
     CPPUNIT_ASSERT_EQUAL(OUString(), getParagraph(1)->getString());
 
     // check that hidden paragraphs at start and end are copied
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(int(3), getParagraphs());
     CPPUNIT_ASSERT_EQUAL(OUString("hidden first paragraph"), 
getParagraph(1)->getString());
@@ -210,14 +235,17 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf145321)
     CPPUNIT_ASSERT_EQUAL(3, getPages());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(3, getShapes());
     CPPUNIT_ASSERT_EQUAL(3, getPages());
@@ -652,12 +680,15 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf138482)
     CPPUNIT_ASSERT_EQUAL(2, getShapes());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(2, getShapes());
 }
 
@@ -673,13 +704,16 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf134965)
     for (sal_Int32 i = 0; i < 10; ++i)
     {
         dispatchCommand(mxComponent, ".uno:SelectAll", {});
+        Scheduler::ProcessEventsToIdle();
 
         dispatchCommand(mxComponent, ".uno:Cut", {});
+        Scheduler::ProcessEventsToIdle();
 
         CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
 
         // Without the fix in place, this test would have crashed here
         dispatchCommand(mxComponent, ".uno:Paste", {});
+        Scheduler::ProcessEventsToIdle();
 
         CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
     }
@@ -697,9 +731,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf128375)
         CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
 
         dispatchCommand(mxComponent, ".uno:SelectAll", {});
+        Scheduler::ProcessEventsToIdle();
 
         // Without the fix in place, this test would have crashed cutting the 
second document
         dispatchCommand(mxComponent, ".uno:Cut", {});
+        Scheduler::ProcessEventsToIdle();
 
         CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
     }
@@ -716,12 +752,15 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf135061)
     CPPUNIT_ASSERT_EQUAL(4, getShapes());
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     for (sal_Int32 i = 0; i < 5; ++i)
     {
         dispatchCommand(mxComponent, ".uno:Paste", {});
+        Scheduler::ProcessEventsToIdle();
     }
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xIndexAccess->getCount());
@@ -731,6 +770,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf135061)
     {
         // Without the fix in place, this test would have crashed here
         dispatchCommand(mxComponent, ".uno:Undo", {});
+        Scheduler::ProcessEventsToIdle();
     }
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
@@ -765,10 +805,12 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132911)
     CPPUNIT_ASSERT_EQUAL(8, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(4, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
 
@@ -781,15 +823,18 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132911)
     CPPUNIT_ASSERT_EQUAL(8, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(4, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(0, getShapes());
 
     //tdf#135247: Without the fix in place, this would have crashed
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(4, getShapes());
 }
@@ -841,6 +886,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf124904)
 
     // remove the first word "Heading" (with change tracking) to update the 
referenced text
     dispatchCommand(mxComponent, ".uno:DelToEndOfWord", {});
+    Scheduler::ProcessEventsToIdle();
 
     // This was "Reference to Heading of document file"
     CPPUNIT_ASSERT_EQUAL(OUString("Reference to of example document "),
@@ -848,6 +894,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf124904)
 
     // don't hide the wholly deleted referenced text
     dispatchCommand(mxComponent, ".uno:DelToEndOfLine", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(OUString("Reference to Heading of example document 
file"),
                          getParagraph(2)->getString());
 }
@@ -880,18 +927,22 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf134404)
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:GoToEndOfPage", {});
+    Scheduler::ProcessEventsToIdle();
     dispatchCommand(mxComponent, ".uno:InsertPagebreak", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(2, getPages());
 
     dispatchCommand(mxComponent, ".uno:SwBackspace", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, the image would have been deleted
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(2, getPages());
 }
@@ -920,12 +971,15 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132321)
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
 
     dispatchCommand(mxComponent, ".uno:GoToEndOfPage", {});
+    Scheduler::ProcessEventsToIdle();
     dispatchCommand(mxComponent, ".uno:SwBackspace", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, the button form would have also been deleted
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
 }
 
@@ -966,9 +1020,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132597)
         { { "SelectedFormat", 
uno::Any(static_cast<sal_uInt32>(SotClipboardFormatId::RTF)) } });
 
     dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -989,9 +1045,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf139737)
         { { "SelectedFormat", 
uno::Any(static_cast<sal_uInt32>(SotClipboardFormatId::RTF)) } });
 
     dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 }
 
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf150845)
@@ -1003,6 +1061,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf150845)
     uno::Sequence<beans::PropertyValue> aArgs(
         comphelper::InitPropertySequence({ { "KeyModifier", uno::Any(KEY_MOD1) 
} }));
     dispatchCommand(mxComponent, ".uno:Edit", aArgs);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
 }
@@ -1120,6 +1179,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf144840)
         { { "SelectedFormat", 
uno::Any(static_cast<sal_uInt32>(SotClipboardFormatId::RTF)) } });
 
     dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
 
@@ -1151,6 +1211,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf131963)
         { { "SelectedFormat", 
uno::Any(static_cast<sal_uInt32>(SotClipboardFormatId::RTF)) } });
 
     dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
 
@@ -1173,9 +1234,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132596)
         { { "SelectedFormat", 
uno::Any(static_cast<sal_uInt32>(SotClipboardFormatId::RTF)) } });
 
     dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aPropertyValues);
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(2, getPages());
 }
@@ -1215,12 +1278,15 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf133967)
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     for (sal_Int32 i = 0; i < 10; ++i)
     {
         dispatchCommand(mxComponent, ".uno:Undo", {});
+        Scheduler::ProcessEventsToIdle();
 
         dispatchCommand(mxComponent, ".uno:Redo", {});
+        Scheduler::ProcessEventsToIdle();
     }
 
     // Without the fix in place, this test would have failed with:
@@ -1268,22 +1334,27 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130094)
     pWrtShell->Down(/*bSelect=*/true);
 
     dispatchCommand(mxComponent, ".uno:Copy", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("First"), getParagraph(1)->getString());
     CPPUNIT_ASSERT_EQUAL(OUString("Second"), getParagraph(2)->getString());
     CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(3)->getString());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("First"), getParagraph(1)->getString());
     CPPUNIT_ASSERT_EQUAL(OUString("Second"), getParagraph(2)->getString());
     CPPUNIT_ASSERT_EQUAL(OUString("Third"), getParagraph(3)->getString());
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("First"), getParagraph(1)->getString());
     CPPUNIT_ASSERT_EQUAL(OUString("Second"), getParagraph(2)->getString());
@@ -1530,14 +1601,17 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf141175)
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
+    Scheduler::ProcessEventsToIdle();
 
     //Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -1584,6 +1658,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf126504)
     dispatchCommand(mxComponent, ".uno:Copy", {});
 
     dispatchCommand(mxComponent, ".uno:GoToEndOfPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Paste", {});
 
@@ -1591,17 +1666,20 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf126504)
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(4), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     //Without the fix in place, it would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -1649,6 +1727,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf134253)
 
     //Without the fix in place, it would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(6, getPages());
@@ -1713,6 +1792,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf140975)
     // Set the Anchor of the shape to As_Char
     selectShape(1);
     dispatchCommand(mxComponent, ".uno:SetAnchorToChar", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Get the layout of the textbox
     auto pExportDump = parseLayoutDump();
@@ -1816,6 +1896,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf140828)
     selectShape(1);
 
     dispatchCommand(mxComponent, ".uno:SetAnchorAtChar", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(
         text::TextContentAnchorType::TextContentAnchorType_AT_CHARACTER,
@@ -1840,9 +1921,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132725)
     CPPUNIT_ASSERT_EQUAL(OUString("AA"), getParagraph(1)->getString());
 
     dispatchCommand(mxComponent, ".uno:GoToEndOfPara", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:SwBackspace", {});
     dispatchCommand(mxComponent, ".uno:SwBackspace", {});
+    Scheduler::ProcessEventsToIdle();
 
     // tdf#137587 fly is no longer deleted by backspace
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
@@ -1850,12 +1933,14 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132725)
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(OUString("AA"), getParagraph(1)->getString());
 
     dispatchCommand(mxComponent, ".uno:Redo", {});
     dispatchCommand(mxComponent, ".uno:Redo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // tdf#137587 fly is no longer deleted by backspace
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
@@ -1863,6 +1948,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132725)
 
     //Without the fix in place, it would crash here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(1, getShapes());
     CPPUNIT_ASSERT_EQUAL(OUString("A"), getParagraph(1)->getString());
@@ -2028,11 +2114,13 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf134021)
     dispatchCommand(mxComponent, ".uno:JumpToNextTable", {});
 
     dispatchCommand(mxComponent, ".uno:DeleteTable", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, it would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(12, getPages());
@@ -2051,11 +2139,13 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf136778)
     dispatchCommand(mxComponent, ".uno:JumpToNextTable", {});
 
     dispatchCommand(mxComponent, ".uno:DeleteTable", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, it would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -2072,6 +2162,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf123285)
                              ".  Here is a short sentence demonstrating this 
very peculiar bug."));
 
     dispatchCommand(mxComponent, ".uno:GoToEndOfPage", {});
+    Scheduler::ProcessEventsToIdle();
 
     pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN);
     Scheduler::ProcessEventsToIdle();
@@ -2154,9 +2245,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130685)
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(2, getPages());
 }
 
@@ -2168,9 +2261,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf132944)
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     // Without the fix in place, the document would have had 2 pages
     CPPUNIT_ASSERT_EQUAL(1, getPages());
@@ -2184,10 +2279,12 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf104649)
 
     dispatchCommand(mxComponent, ".uno:SelectAll", {});
     dispatchCommand(mxComponent, ".uno:Delete", {});
+    Scheduler::ProcessEventsToIdle();
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 
     // Without the fix in place, this test would have crashed here
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 
     CPPUNIT_ASSERT_EQUAL(OUString("Test"), getParagraph(1)->getString());
 }
diff --git a/sw/qa/extras/uiwriter/uiwriter4.cxx 
b/sw/qa/extras/uiwriter/uiwriter4.cxx
index 281ad33fd9e5..77b42667ee87 100644
--- a/sw/qa/extras/uiwriter/uiwriter4.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter4.cxx
@@ -137,8 +137,10 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf146449)
     CPPUNIT_ASSERT(pShell->SelectObj(Point(), 0, pObject));
 
     dispatchCommand(mxComponent, ".uno:Cut", {});
+    Scheduler::ProcessEventsToIdle();
 
     dispatchCommand(mxComponent, ".uno:Undo", {});
+    Scheduler::ProcessEventsToIdle();
 

... etc. - the rest is truncated

Reply via email to