summaryrefslogtreecommitdiff
path: root/sc/qa/unit/tiledrendering/tiledrendering.cxx
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2017-01-06 18:35:08 +0100
committerJan Holesovsky <kendy@collabora.com>2017-01-11 17:07:15 +0100
commitee821f3cc68838910e1a06b6141c2580152640d3 (patch)
tree594596e94752f88f54836480a4fece469ef6893a /sc/qa/unit/tiledrendering/tiledrendering.cxx
parenta98c5fbc9fdde5e5c489ca8b50d47598246a011a (diff)
LOK: Calc: limiting undo and add support for repair modecp-5.1-17
During collaborative editing changes can be undone regardless of who made them. This patch avoids this possibility and introduce support for repair mode, for cases where undo/redo of others' changes is intentional. Change-Id: I69fd435e96c4c675ffd1df81e936b5eae109daa0
Diffstat (limited to 'sc/qa/unit/tiledrendering/tiledrendering.cxx')
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx133
1 files changed, 133 insertions, 0 deletions
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index 74a08a38a9ae..8ea7364c6f24 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -69,6 +69,8 @@ public:
void testHideColRow();
void testInvalidateOnCopyPasteCells();
void testInvalidateOnInserRowCol();
+ void testUndoLimiting();
+ void testUndoRepairDispatch();
CPPUNIT_TEST_SUITE(ScTiledRenderingTest);
CPPUNIT_TEST(testRowColumnSelections);
@@ -89,6 +91,8 @@ public:
CPPUNIT_TEST(testHideColRow);
CPPUNIT_TEST(testInvalidateOnCopyPasteCells);
CPPUNIT_TEST(testInvalidateOnInserRowCol);
+ CPPUNIT_TEST(testUndoLimiting);
+ CPPUNIT_TEST(testUndoRepairDispatch);
CPPUNIT_TEST_SUITE_END();
private:
@@ -1006,6 +1010,135 @@ void ScTiledRenderingTest::testInvalidateOnInserRowCol()
comphelper::LibreOfficeKit::setActive(false);
}
+void ScTiledRenderingTest::testUndoLimiting()
+{
+ comphelper::LibreOfficeKit::setActive();
+
+ ScModelObj* pModelObj = createDoc("small.ods");
+ CPPUNIT_ASSERT(pModelObj);
+ ScDocument* pDoc = pModelObj->GetDocument();
+ CPPUNIT_ASSERT(pDoc);
+ SfxUndoManager* pUndoManager = pDoc->GetUndoManager();
+ CPPUNIT_ASSERT(pUndoManager);
+
+ // view #1
+ ViewCallback aView1;
+ int nView1 = SfxLokHelper::getView();
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1);
+
+ // view #2
+ SfxLokHelper::createView();
+ ViewCallback aView2;
+ int nView2 = SfxLokHelper::getView();
+ pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView2);
+
+ // text edit a cell in view #1
+ SfxLokHelper::setView(nView1);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'x', 0);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 'x', 0);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
+ Scheduler::ProcessEventsToIdle();
+
+ // check that undo action count in not 0
+ CPPUNIT_ASSERT(pUndoManager->GetUndoActionCount() == 1);
+
+ // try to execute undo in view #2
+ SfxLokHelper::setView(nView2);
+ comphelper::dispatchCommand(".uno:Undo", {});
+ Scheduler::ProcessEventsToIdle();
+ // check that undo has not been executed on view #2
+ CPPUNIT_ASSERT(pUndoManager->GetUndoActionCount() == 1);
+
+ // try to execute undo in view #1
+ SfxLokHelper::setView(nView1);
+ comphelper::dispatchCommand(".uno:Undo", {});
+ Scheduler::ProcessEventsToIdle();
+ // check that undo has been executed on view #1
+ CPPUNIT_ASSERT(pUndoManager->GetUndoActionCount() == 0);
+
+ // check that redo action count in not 0
+ CPPUNIT_ASSERT(pUndoManager->GetRedoActionCount() == 1);
+
+ // try to execute redo in view #2
+ SfxLokHelper::setView(nView2);
+ comphelper::dispatchCommand(".uno:Redo", {});
+ Scheduler::ProcessEventsToIdle();
+ // check that redo has not been executed on view #2
+ CPPUNIT_ASSERT(pUndoManager->GetRedoActionCount() == 1);
+
+ // try to execute redo in view #1
+ SfxLokHelper::setView(nView1);
+ comphelper::dispatchCommand(".uno:Redo", {});
+ Scheduler::ProcessEventsToIdle();
+ // check that redo has been executed on view #1
+ CPPUNIT_ASSERT(pUndoManager->GetRedoActionCount() == 0);
+
+ mxComponent->dispose();
+ mxComponent.clear();
+
+ comphelper::LibreOfficeKit::setActive(false);
+}
+
+void ScTiledRenderingTest::testUndoRepairDispatch()
+{
+ comphelper::LibreOfficeKit::setActive();
+
+ ScModelObj* pModelObj = createDoc("small.ods");
+ CPPUNIT_ASSERT(pModelObj);
+ ScDocument* pDoc = pModelObj->GetDocument();
+ CPPUNIT_ASSERT(pDoc);
+ SfxUndoManager* pUndoManager = pDoc->GetUndoManager();
+ CPPUNIT_ASSERT(pUndoManager);
+
+ // view #1
+ ViewCallback aView1;
+ int nView1 = SfxLokHelper::getView();
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1);
+
+ // view #2
+ SfxLokHelper::createView();
+ ViewCallback aView2;
+ int nView2 = SfxLokHelper::getView();
+ pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView2);
+
+ // text edit a cell in view #1
+ SfxLokHelper::setView(nView1);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'x', 0);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 'x', 0);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN);
+ Scheduler::ProcessEventsToIdle();
+
+ // check that undo action count in not 0
+ CPPUNIT_ASSERT(pUndoManager->GetUndoActionCount() == 1);
+
+ // try to execute undo in view #2
+ SfxLokHelper::setView(nView2);
+ comphelper::dispatchCommand(".uno:Undo", {});
+ Scheduler::ProcessEventsToIdle();
+ // check that undo has not been executed on view #2
+ CPPUNIT_ASSERT(pUndoManager->GetUndoActionCount() == 1);
+
+ // try to execute undo in view #2 in repair mode
+ SfxLokHelper::setView(nView2);
+ uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
+ {
+ {"Repair", uno::makeAny(true)}
+ }));
+ comphelper::dispatchCommand(".uno:Undo", aPropertyValues);
+ Scheduler::ProcessEventsToIdle();
+ // check that undo has been executed on view #2 in repair mode
+ CPPUNIT_ASSERT(pUndoManager->GetUndoActionCount() == 0);
+
+ mxComponent->dispose();
+ mxComponent.clear();
+
+ comphelper::LibreOfficeKit::setActive(false);
+}
+
}
CPPUNIT_TEST_SUITE_REGISTRATION(ScTiledRenderingTest);