[Libreoffice-commits] core.git: sc/qa

Kohei Yoshida kohei.yoshida at collabora.com
Wed May 3 02:55:24 UTC 2017


 sc/qa/unit/ucalc.hxx        |    2 +
 sc/qa/unit/ucalc_column.cxx |   59 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+)

New commits:
commit 5233a2c9009533e454a734ac57c764e15f92a229
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Tue May 2 19:44:57 2017 -0400

    tdf#107255: add test case for the multi-cell query method.
    
    This is the best we can do since the rest of the cell merge code is
    in ScViewFunc which cannot be unit-tested currently.
    
    Change-Id: I639f48d5cd05bff015689b0d223684f6f8d302f8
    Reviewed-on: https://gerrit.libreoffice.org/37179
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>

diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 486bb1064e89..18ddbd58af60 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -518,6 +518,7 @@ public:
     void testUndoDataAnchor();
     void testFormulaErrorPropagation();
     void testSetFormula();
+    void testMultipleDataCellsInRange();
 
     void testTdf97369();
     void testTdf97587();
@@ -786,6 +787,7 @@ public:
     CPPUNIT_TEST(testUndoDataAnchor);
     CPPUNIT_TEST(testFormulaErrorPropagation);
     CPPUNIT_TEST(testSetFormula);
+    CPPUNIT_TEST(testMultipleDataCellsInRange);
     CPPUNIT_TEST(testTdf97369);
     CPPUNIT_TEST(testTdf97587);
     CPPUNIT_TEST(testEmptyCalcDocDefaults);
diff --git a/sc/qa/unit/ucalc_column.cxx b/sc/qa/unit/ucalc_column.cxx
index 6a70aef3923f..8aeb6f2dbf57 100644
--- a/sc/qa/unit/ucalc_column.cxx
+++ b/sc/qa/unit/ucalc_column.cxx
@@ -126,4 +126,63 @@ void Test::testSetFormula()
     m_pDoc->DeleteTab(0);
 }
 
+void Test::testMultipleDataCellsInRange()
+{
+    m_pDoc->InsertTab(0, "Test");
+
+    ScRange aRange(1,2,0); // B3
+    sc::MultiDataCellState aState = m_pDoc->HasMultipleDataCells(aRange);
+    CPPUNIT_ASSERT_EQUAL(sc::MultiDataCellState::Empty, aState.meState);
+
+    // Set a numeric value to B3.
+    m_pDoc->SetValue(ScAddress(1,2,0), 1.0);
+    aState = m_pDoc->HasMultipleDataCells(aRange);
+    CPPUNIT_ASSERT_EQUAL(sc::MultiDataCellState::HasOneCell, aState.meState);
+    CPPUNIT_ASSERT_EQUAL(SCCOL(1), aState.mnCol1);
+    CPPUNIT_ASSERT_EQUAL(SCROW(2), aState.mnRow1);
+    CPPUNIT_ASSERT_EQUAL(SCTAB(0), aState.mnTab1);
+
+    // Set another numeric value to B4.
+    m_pDoc->SetValue(ScAddress(1,3,0), 2.0);
+    aRange.aEnd.SetRow(3); // B3:B4
+    aState = m_pDoc->HasMultipleDataCells(aRange);
+    CPPUNIT_ASSERT_EQUAL(sc::MultiDataCellState::HasMultipleCells, aState.meState);
+    CPPUNIT_ASSERT_EQUAL(SCCOL(1), aState.mnCol1);
+    CPPUNIT_ASSERT_EQUAL(SCROW(2), aState.mnRow1);
+    CPPUNIT_ASSERT_EQUAL(SCTAB(0), aState.mnTab1);
+
+    // Set the query range to B4:B5.  Now it should only report one cell, with
+    // B4 being the first non-empty cell.
+    aRange.aStart.SetRow(3);
+    aRange.aEnd.SetRow(4);
+    aState = m_pDoc->HasMultipleDataCells(aRange);
+    CPPUNIT_ASSERT_EQUAL(sc::MultiDataCellState::HasOneCell, aState.meState);
+    CPPUNIT_ASSERT_EQUAL(SCCOL(1), aState.mnCol1);
+    CPPUNIT_ASSERT_EQUAL(SCROW(3), aState.mnRow1);
+    CPPUNIT_ASSERT_EQUAL(SCTAB(0), aState.mnTab1);
+
+    // Set the query range to A1:C3.  The first non-empty cell should be B3.
+    aRange = ScRange(0,0,0,2,2,0);
+    aState = m_pDoc->HasMultipleDataCells(aRange);
+    CPPUNIT_ASSERT_EQUAL(sc::MultiDataCellState::HasOneCell, aState.meState);
+    CPPUNIT_ASSERT_EQUAL(SCCOL(1), aState.mnCol1);
+    CPPUNIT_ASSERT_EQUAL(SCROW(2), aState.mnRow1);
+    CPPUNIT_ASSERT_EQUAL(SCTAB(0), aState.mnTab1);
+
+    // Set string cells to D4 and F5, and query D3:F5.  D4 should be the first
+    // non-empty cell.
+    m_pDoc->SetString(ScAddress(3,3,0), "foo");
+    m_pDoc->SetString(ScAddress(5,4,0), "bar");
+    aRange = ScRange(3,2,0,5,4,0);
+    aState = m_pDoc->HasMultipleDataCells(aRange);
+    CPPUNIT_ASSERT_EQUAL(sc::MultiDataCellState::HasMultipleCells, aState.meState);
+    CPPUNIT_ASSERT_EQUAL(SCCOL(3), aState.mnCol1);
+    CPPUNIT_ASSERT_EQUAL(SCROW(3), aState.mnRow1);
+    CPPUNIT_ASSERT_EQUAL(SCTAB(0), aState.mnTab1);
+
+    // TODO : add more test cases as needed.
+
+    m_pDoc->DeleteTab(0);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list