[Libreoffice-commits] core.git: 2 commits - sc/inc sc/qa sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Mon Jan 27 16:11:04 PST 2014
sc/inc/scopetools.hxx | 6 +++--
sc/qa/unit/data/ods/formula-across-sheets.ods |binary
sc/qa/unit/subsequent_filters-test.cxx | 27 ++++++++++++++++++++++++++
sc/source/core/data/column.cxx | 2 -
4 files changed, 32 insertions(+), 3 deletions(-)
New commits:
commit f571104ef38ba9f7f6073e22c2374add7aa73887
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Mon Jan 27 19:08:30 2014 -0500
fdo#69244: Avoid putting these cells in formula tree prematurely.
Marking the cell dirty alone appears to be sufficient to trigger resetting
of number format. SetDirty() would mark it dirty *and* put the cell into
formula tree, which would prevent proper value propagation as seen in the
bug report.
Change-Id: Ie68f996112938fe286a9bd50c38404f9df6f4ca1
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 007e9e3..8c6102f 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -2863,7 +2863,7 @@ public:
if( (nFormat % SV_COUNTRY_LANGUAGE_OFFSET) != 0)
pCell->SetNeedNumberFormat(false);
else
- pCell->SetDirty(true);
+ pCell->SetDirtyVar();
pCell->CompileXML(mrProgress);
}
commit 83f69e697a9bfa90671df6e1d5d25ae11b7b568a
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Mon Jan 27 19:08:01 2014 -0500
fdo#69244: Write unit test for this.
Change-Id: I5bfc8ad1566dbfc2813aadc8f08ba1eccca608ca
diff --git a/sc/inc/scopetools.hxx b/sc/inc/scopetools.hxx
index 3544b79..a7983e0 100644
--- a/sc/inc/scopetools.hxx
+++ b/sc/inc/scopetools.hxx
@@ -10,6 +10,8 @@
#ifndef SC_SCOPETOOLS_HXX
#define SC_SCOPETOOLS_HXX
+#include <scdllapi.h>
+
class ScDocument;
namespace sc {
@@ -17,7 +19,7 @@ namespace sc {
/**
* Temporarily switch on/off auto calculation mode.
*/
-class AutoCalcSwitch
+class SC_DLLPUBLIC AutoCalcSwitch
{
ScDocument& mrDoc;
bool mbOldValue;
@@ -26,7 +28,7 @@ public:
~AutoCalcSwitch();
};
-class ExpandRefsSwitch
+class SC_DLLPUBLIC ExpandRefsSwitch
{
ScDocument& mrDoc;
bool mbOldValue;
diff --git a/sc/qa/unit/data/ods/formula-across-sheets.ods b/sc/qa/unit/data/ods/formula-across-sheets.ods
new file mode 100644
index 0000000..50f4faa
Binary files /dev/null and b/sc/qa/unit/data/ods/formula-across-sheets.ods differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 8f1d4c9..3fae9e0 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -47,6 +47,7 @@
#include "attrib.hxx"
#include "dpsave.hxx"
#include "dpshttab.hxx"
+#include <scopetools.hxx>
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#include <com/sun/star/drawing/XControlShape.hpp>
@@ -93,6 +94,7 @@ public:
void testFunctionsExcel2010();
void testCachedFormulaResultsODS();
void testCachedMatrixFormulaResultsODS();
+ void testFormulaDepAcrossSheetsODS();
void testDatabaseRangesODS();
void testDatabaseRangesXLS();
void testDatabaseRangesXLSX();
@@ -164,6 +166,7 @@ public:
CPPUNIT_TEST(testFunctionsODS);
CPPUNIT_TEST(testFunctionsExcel2010);
CPPUNIT_TEST(testCachedFormulaResultsODS);
+ CPPUNIT_TEST(testFormulaDepAcrossSheetsODS);
CPPUNIT_TEST(testCachedMatrixFormulaResultsODS);
CPPUNIT_TEST(testDatabaseRangesODS);
CPPUNIT_TEST(testDatabaseRangesXLS);
@@ -597,6 +600,30 @@ void ScFiltersTest::testCachedMatrixFormulaResultsODS()
xDocSh->DoClose();
}
+void ScFiltersTest::testFormulaDepAcrossSheetsODS()
+{
+ ScDocShellRef xDocSh = loadDoc("formula-across-sheets.", ODS);
+ CPPUNIT_ASSERT_MESSAGE("Failed to load the file.", xDocSh.Is());
+ ScDocument* pDoc = xDocSh->GetDocument();
+
+ sc::AutoCalcSwitch aACSwitch(*pDoc, true); // Make sure auto calc is turned on.
+
+ // Save the original values of A4:C4.
+ double fA4 = pDoc->GetValue(ScAddress(0,3,2));
+ double fB4 = pDoc->GetValue(ScAddress(1,3,2));
+ double fC4 = pDoc->GetValue(ScAddress(2,3,2));
+
+ // Change the value of D4. This should trigger A4:C4 to be recalculated.
+ double fD4 = pDoc->GetValue(ScAddress(3,3,2));
+ pDoc->SetValue(ScAddress(3,3,2), fD4+1.0);
+
+ CPPUNIT_ASSERT_MESSAGE("The value must differ from the original.", fA4 != pDoc->GetValue(ScAddress(0,3,2)));
+ CPPUNIT_ASSERT_MESSAGE("The value must differ from the original.", fB4 != pDoc->GetValue(ScAddress(1,3,2)));
+ CPPUNIT_ASSERT_MESSAGE("The value must differ from the original.", fC4 != pDoc->GetValue(ScAddress(2,3,2)));
+
+ xDocSh->DoClose();
+}
+
namespace {
void testDBRanges_Impl(ScDocument* pDoc, sal_Int32 nFormat)
More information about the Libreoffice-commits
mailing list