sc/qa/unit/uicalc/uicalc.cxx | 59 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-)
New commits: commit a83dc2cebb60ec27a0d2606a9b7c196e581766fd Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Tue Mar 22 17:11:58 2022 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Mar 22 18:15:58 2022 +0100 tdf#103994: sc_uicalc: Add unittest Change-Id: I64704b615e148573ba084cf4ecd15dc716b35194 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131942 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx index a3a782aa9a19..13e12973c07b 100644 --- a/sc/qa/unit/uicalc/uicalc.cxx +++ b/sc/qa/unit/uicalc/uicalc.cxx @@ -47,6 +47,8 @@ public: virtual void tearDown() override; ScModelObj* createDoc(const char* pName); + utl::TempFile save(css::uno::Reference<css::lang::XComponent>& xComponent, + const OUString& rFilter); ScModelObj* saveAndReload(css::uno::Reference<css::lang::XComponent>& xComponent, const OUString& rFilter); void goToCell(const OUString& rCell); @@ -167,8 +169,8 @@ ScModelObj* ScUiCalcTest::createDoc(const char* pName) return pModelObj; } -ScModelObj* ScUiCalcTest::saveAndReload(css::uno::Reference<css::lang::XComponent>& xComponent, - const OUString& rFilter) +utl::TempFile ScUiCalcTest::save(css::uno::Reference<css::lang::XComponent>& xComponent, + const OUString& rFilter) { utl::TempFile aTempFile; aTempFile.EnableKillingFile(); @@ -178,6 +180,14 @@ ScModelObj* ScUiCalcTest::saveAndReload(css::uno::Reference<css::lang::XComponen css::uno::Reference<css::util::XCloseable> xCloseable(xComponent, css::uno::UNO_QUERY_THROW); xCloseable->close(true); + return aTempFile; +} + +ScModelObj* ScUiCalcTest::saveAndReload(css::uno::Reference<css::lang::XComponent>& xComponent, + const OUString& rFilter) +{ + utl::TempFile aTempFile = save(xComponent, rFilter); + mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.sheet.SpreadsheetDocument"); ScModelObj* pModelObj = dynamic_cast<ScModelObj*>(mxComponent.get()); @@ -185,6 +195,51 @@ ScModelObj* ScUiCalcTest::saveAndReload(css::uno::Reference<css::lang::XComponen return pModelObj; } +CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf103994) +{ + mxComponent = loadFromDesktop("private:factory/scalc"); + ScModelObj* pModelObj = dynamic_cast<ScModelObj*>(mxComponent.get()); + CPPUNIT_ASSERT(pModelObj); + ScDocument* pDoc = pModelObj->GetDocument(); + CPPUNIT_ASSERT(pDoc); + + insertStringToCell(*pModelObj, "A1", "1"); + insertStringToCell(*pModelObj, "B1", "2"); + + // Save the document + utl::TempFile aTempFile = save(mxComponent, "calc8"); + + // Open a new document + mxComponent = loadFromDesktop("private:factory/scalc"); + pModelObj = dynamic_cast<ScModelObj*>(mxComponent.get()); + CPPUNIT_ASSERT(pModelObj); + pDoc = pModelObj->GetDocument(); + CPPUNIT_ASSERT(pDoc); + + // Insert the reference to the external document + OUString aFormula = "='" + aTempFile.GetURL() + "'#$Sheet1.A1"; + insertStringToCell(*pModelObj, "A1", aFormula.toUtf8().getStr()); + + CPPUNIT_ASSERT_EQUAL(aFormula, pDoc->GetFormula(0, 0, 0)); + CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(0, 0, 0))); + + 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 + // - Actual : ='file:///tmp/lu124171irlmb.tmp'#$Sheet1.B1 + CPPUNIT_ASSERT_EQUAL(aFormula, pDoc->GetFormula(1, 0, 0)); + CPPUNIT_ASSERT_EQUAL(1.0, pDoc->GetValue(ScAddress(1, 0, 0))); +} + CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf126577) { mxComponent = loadFromDesktop("private:factory/scalc");