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

Kohei Yoshida kohei.yoshida at gmail.com
Wed Jul 24 08:30:50 PDT 2013


 sc/qa/unit/ucalc.cxx           |   52 ++++++++++++++++++++++++++++++++++-------
 sc/source/core/data/column.cxx |    1 
 2 files changed, 45 insertions(+), 8 deletions(-)

New commits:
commit f446ad2e2fdfaadafdd74b395a6dd252a17a4015
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Wed Jul 24 10:51:30 2013 -0400

    fdo#67206: Don't forget to swap the broadcaster storage when swapping columns.
    
    And a new unit test case to catch this in the future.
    
    Change-Id: Ife7d0579849a769c23ace8bfd86a39892253a121
    Reviewed-on: https://gerrit.libreoffice.org/5070
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 3f306d0..93d8dd5 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2072,15 +2072,17 @@ void Test::testCellBroadcaster()
     // Clear everything again
     clearRange(m_pDoc, ScRange(0,0,0,10,100,0));
 
-    // Switch to R1C1 to make it easier to input relative references in multiple cells.
-    FormulaGrammarSwitch aFGSwitch(m_pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
-
-    // Have B1:B20 reference A1:A20.
-    val = 0.0;
-    for (SCROW i = 0; i < 20; ++i)
     {
-        m_pDoc->SetValue(ScAddress(0,i,0), val++);
-        m_pDoc->SetString(ScAddress(1,i,0), "=RC[-1]");
+        // Switch to R1C1 to make it easier to input relative references in multiple cells.
+        FormulaGrammarSwitch aFGSwitch(m_pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
+
+        // Have B1:B20 reference A1:A20.
+        val = 0.0;
+        for (SCROW i = 0; i < 20; ++i)
+        {
+            m_pDoc->SetValue(ScAddress(0,i,0), val++);
+            m_pDoc->SetString(ScAddress(1,i,0), "=RC[-1]");
+        }
     }
 
     // Ensure that the formula cells show correct values, and the referenced
@@ -2104,6 +2106,40 @@ void Test::testCellBroadcaster()
         CPPUNIT_ASSERT_MESSAGE("Broadcaster should have been deleted.", !pBC);
     }
 
+    // Clear everything again
+    clearRange(m_pDoc, ScRange(0,0,0,10,100,0));
+
+    m_pDoc->SetValue(ScAddress(0,0,0), 2.0);
+    m_pDoc->SetString(ScAddress(1,0,0), "=A1");
+    m_pDoc->SetString(ScAddress(2,0,0), "=B1");
+    CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(0,0,0));
+    CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(1,0,0));
+    CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(2,0,0));
+
+    pBC = m_pDoc->GetBroadcaster(ScAddress(0,0,0));
+    CPPUNIT_ASSERT_MESSAGE("Broadcaster should exist here.", pBC);
+    pBC = m_pDoc->GetBroadcaster(ScAddress(1,0,0));
+    CPPUNIT_ASSERT_MESSAGE("Broadcaster should exist here.", pBC);
+
+    // Change the value of A1 and make sure everyone follows suit.
+    m_pDoc->SetValue(ScAddress(0,0,0), 3.5);
+    CPPUNIT_ASSERT_EQUAL(3.5, m_pDoc->GetValue(0,0,0));
+    CPPUNIT_ASSERT_EQUAL(3.5, m_pDoc->GetValue(1,0,0));
+    CPPUNIT_ASSERT_EQUAL(3.5, m_pDoc->GetValue(2,0,0));
+
+    // Insert a column at column B.
+    m_pDoc->InsertCol(ScRange(1,0,0,1,MAXROW,0));
+    pBC = m_pDoc->GetBroadcaster(ScAddress(0,0,0));
+    CPPUNIT_ASSERT_MESSAGE("Broadcaster should exist here.", pBC);
+    pBC = m_pDoc->GetBroadcaster(ScAddress(2,0,0));
+    CPPUNIT_ASSERT_MESSAGE("Broadcaster should exist here.", pBC);
+
+    // Change the value of A1 again.
+    m_pDoc->SetValue(ScAddress(0,0,0), 5.5);
+    CPPUNIT_ASSERT_EQUAL(5.5, m_pDoc->GetValue(0,0,0));
+    CPPUNIT_ASSERT_EQUAL(5.5, m_pDoc->GetValue(2,0,0));
+    CPPUNIT_ASSERT_EQUAL(5.5, m_pDoc->GetValue(3,0,0));
+
     m_pDoc->DeleteTab(0);
 }
 
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 8782552..88cb65d 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1613,6 +1613,7 @@ void ScColumn::MarkScenarioIn( ScMarkData& rDestMark ) const
 
 void ScColumn::SwapCol(ScColumn& rCol)
 {
+    maBroadcasters.swap(rCol.maBroadcasters);
     maItems.swap(rCol.maItems);
     maCellTextAttrs.swap(rCol.maCellTextAttrs);
 


More information about the Libreoffice-commits mailing list