[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - 2 commits - sc/qa sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Thu Dec 11 17:58:02 PST 2014


 sc/qa/unit/ucalc.hxx                  |    2 +
 sc/qa/unit/ucalc_sharedformula.cxx    |   36 ++++++++++++++++++++++++++++++++++
 sc/source/core/tool/sharedformula.cxx |    7 ++++--
 3 files changed, 43 insertions(+), 2 deletions(-)

New commits:
commit 470d96d4e0becff7d1cd23365d94e459086c0675
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Dec 11 20:54:12 2014 -0500

    fdo#86572: Write test for this.
    
    Change-Id: I00c3eaac473f0464e923e785cc50ad6769c78d41
    (cherry picked from commit 170616e9f2d30c1302bbb5a7a4b588bc05cd5cc9)

diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 72ecaa0..8f6c7d3 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -325,6 +325,7 @@ public:
     void testSharedFormulaMoveBlock();
     void testSharedFormulaUpdateOnNamedRangeChange();
     void testSharedFormulaUpdateOnDBChange();
+    void testSharedFormulaAbsCellListener();
     void testFormulaPosition();
 
     void testMixData();
@@ -557,6 +558,7 @@ public:
     CPPUNIT_TEST(testSharedFormulaInsertColumn);
     CPPUNIT_TEST(testSharedFormulaUpdateOnNamedRangeChange);
     CPPUNIT_TEST(testSharedFormulaUpdateOnDBChange);
+    CPPUNIT_TEST(testSharedFormulaAbsCellListener);
     CPPUNIT_TEST(testFormulaPosition);
     CPPUNIT_TEST(testMixData);
     CPPUNIT_TEST(testJumpToPrecedentsDependents);
diff --git a/sc/qa/unit/ucalc_sharedformula.cxx b/sc/qa/unit/ucalc_sharedformula.cxx
index 2ef7d88..a88ec21 100644
--- a/sc/qa/unit/ucalc_sharedformula.cxx
+++ b/sc/qa/unit/ucalc_sharedformula.cxx
@@ -1605,4 +1605,40 @@ void Test::testSharedFormulaUpdateOnDBChange()
     m_pDoc->DeleteTab(0);
 }
 
+void Test::testSharedFormulaAbsCellListener()
+{
+    sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn on auto calc.
+
+    m_pDoc->InsertTab(0, "Test");
+
+    m_pDoc->SetValue(ScAddress(0,0,0), 1.0);
+
+    const char* pData[][1] = {
+        { "=$A$1" },
+        { "=$A$1" },
+        { "=$A$1" }
+    };
+
+    insertRangeData(m_pDoc, ScAddress(1,0,0), pData, SAL_N_ELEMENTS(pData));
+
+    // A1 should have 3 listeners listening into it.
+    const SvtBroadcaster* pBC = m_pDoc->GetBroadcaster(ScAddress(0,0,0));
+    CPPUNIT_ASSERT(pBC);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), pBC->GetAllListeners().size());
+
+    // Check the formula results.
+    CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(1,0,0)));
+    CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(1,1,0)));
+    CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(1,2,0)));
+
+    // Change the value of A1 and make sure B1:B3 follows.
+    m_pDoc->SetValue(ScAddress(0,0,0), 2.5);
+
+    CPPUNIT_ASSERT_EQUAL(2.5, m_pDoc->GetValue(ScAddress(1,0,0)));
+    CPPUNIT_ASSERT_EQUAL(2.5, m_pDoc->GetValue(ScAddress(1,1,0)));
+    CPPUNIT_ASSERT_EQUAL(2.5, m_pDoc->GetValue(ScAddress(1,2,0)));
+
+    m_pDoc->DeleteTab(0);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 38e2a276859792f0b7f5d1667555217b3b451544
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Dec 11 20:52:53 2014 -0500

    fdo#86572: Increment row position *only when* the row ref is relative.
    
    This is just a simple oversight.
    
    Change-Id: I024777c46641cce3410a20f40c48f47ad6a5dade
    (cherry picked from commit 52781a55441cb270ffecc2522d1e069141a21607)

diff --git a/sc/source/core/tool/sharedformula.cxx b/sc/source/core/tool/sharedformula.cxx
index 67a40c2..b1cd80d 100644
--- a/sc/source/core/tool/sharedformula.cxx
+++ b/sc/source/core/tool/sharedformula.cxx
@@ -362,15 +362,18 @@ void SharedFormulaUtil::startListeningAsGroup( sc::StartListeningContext& rCxt,
         {
             case formula::svSingleRef:
             {
-                ScAddress aPos = t->GetSingleRef()->toAbs(rTopCell.aPos);
+                const ScSingleRefData* pRef = t->GetSingleRef();
+                ScAddress aPos = pRef->toAbs(rTopCell.aPos);
                 ScFormulaCell** pp = ppSharedTop;
                 ScFormulaCell** ppEnd = ppSharedTop + xGroup->mnLength;
-                for (; pp != ppEnd; ++pp, aPos.IncRow())
+                for (; pp != ppEnd; ++pp)
                 {
                     if (!aPos.IsValid())
                         break;
 
                     rDoc.StartListeningCell(rCxt, aPos, **pp);
+                    if (pRef->IsRowRel())
+                        aPos.IncRow();
                 }
             }
             break;


More information about the Libreoffice-commits mailing list