[Libreoffice-commits] core.git: compilerplugins/clang sc/CppunitTest_sc_ucalc_condformat.mk sc/CppunitTest_sc_ucalc.mk sc/inc sc/Module_sc.mk sc/qa

Xisco Fauli (via logerrit) logerrit at kemper.freedesktop.org
Sun May 16 20:02:37 UTC 2021


 compilerplugins/clang/unusedmethods.results |   12 
 sc/CppunitTest_sc_ucalc.mk                  |    1 
 sc/CppunitTest_sc_ucalc_condformat.mk       |   14 +
 sc/Module_sc.mk                             |    1 
 sc/inc/clipcontext.hxx                      |    2 
 sc/inc/document.hxx                         |    2 
 sc/qa/unit/helper/qahelper.cxx              |   14 +
 sc/qa/unit/helper/qahelper.hxx              |    3 
 sc/qa/unit/ucalc.cxx                        |   12 
 sc/qa/unit/ucalc.hxx                        |   78 -----
 sc/qa/unit/ucalc_condformat.cxx             |  373 ++++++++++++++++------------
 11 files changed, 250 insertions(+), 262 deletions(-)

New commits:
commit ff2e562cd2ef8f6c08180bce16d2c4000a8aa841
Author:     Xisco Fauli <xiscofauli at libreoffice.org>
AuthorDate: Sun May 16 20:12:37 2021 +0200
Commit:     Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Sun May 16 22:01:59 2021 +0200

    sc_ucalc: move conditional format tests to their own module
    
    in order to split sc_ucalc monster into smaller
    modules
    
    While at it, remove testCopyPasteSkipEmptyConditionalFormatting
    it was added already disabled in 5915d38e84c7a7861c169bea18c63824bcfdc470
    <add disabled test for conditional formatting with skip empty cells>
    and it fails if it's enabled
    
    Change-Id: I6222849b38ab288b24432dc00698d72f5bcc5c2e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115677
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>

diff --git a/compilerplugins/clang/unusedmethods.results b/compilerplugins/clang/unusedmethods.results
index 5591c686020a..88857e7f81f2 100644
--- a/compilerplugins/clang/unusedmethods.results
+++ b/compilerplugins/clang/unusedmethods.results
@@ -1182,18 +1182,6 @@ sc/qa/unit/ucalc.hxx:191
     void Test::testSingleCellCopyColumnLabel()
 sc/qa/unit/ucalc.hxx:251
     void Test::testExternalRefUnresolved()
-sc/qa/unit/ucalc.hxx:391
-    void Test::testCopyPasteSkipEmptyConditionalFormatting()
-sc/qa/unit/ucalc.hxx:536
-    void Test::testCondFormatUpdateMoveTab()
-sc/qa/unit/ucalc.hxx:537
-    void Test::testCondFormatUpdateDeleteTab()
-sc/qa/unit/ucalc.hxx:538
-    void Test::testCondFormatUpdateInsertTab()
-sc/qa/unit/ucalc.hxx:539
-    void Test::testCondFormatUpdateReference()
-sc/qa/unit/ucalc.hxx:549
-    void Test::testCondFormatListenToOwnRange()
 sc/source/core/inc/interpre.hxx:71
     basic_ostream<type-parameter-?-?, type-parameter-?-?> & sc::operator<<(basic_ostream<type-parameter-?-?, type-parameter-?-?> &,const struct sc::ParamIfsResult &)
 sc/source/core/opencl/formulagroupcl.cxx:1061
diff --git a/sc/CppunitTest_sc_ucalc.mk b/sc/CppunitTest_sc_ucalc.mk
index ad4d96735b9f..fde0bf350eb3 100644
--- a/sc/CppunitTest_sc_ucalc.mk
+++ b/sc/CppunitTest_sc_ucalc.mk
@@ -16,7 +16,6 @@ $(eval $(call gb_Library_use_common_precompiled_header,sc_ucalc))
 $(eval $(call gb_CppunitTest_add_exception_objects,sc_ucalc, \
     sc/qa/unit/ucalc \
     sc/qa/unit/ucalc_column \
-    sc/qa/unit/ucalc_condformat \
     sc/qa/unit/ucalc_formula \
 ))
 
diff --git a/sc/CppunitTest_sc_ucalc_condformat.mk b/sc/CppunitTest_sc_ucalc_condformat.mk
new file mode 100644
index 000000000000..621af3390791
--- /dev/null
+++ b/sc/CppunitTest_sc_ucalc_condformat.mk
@@ -0,0 +1,14 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call sc_ucalc_test,_condformat))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk
index 2beb6361d330..9cc25d6052ea 100644
--- a/sc/Module_sc.mk
+++ b/sc/Module_sc.mk
@@ -40,6 +40,7 @@ $(eval $(call gb_Module_add_check_targets,sc,\
 	Library_scqahelper \
 	$(if $(and $(filter $(COM),MSC),$(MERGELIBS)),, \
 		CppunitTest_sc_ucalc) \
+	CppunitTest_sc_ucalc_condformat \
 	CppunitTest_sc_ucalc_pivottable \
 	CppunitTest_sc_ucalc_sharedformula \
 	CppunitTest_sc_ucalc_sort \
diff --git a/sc/inc/clipcontext.hxx b/sc/inc/clipcontext.hxx
index 55746b74f31e..ccce671eea65 100644
--- a/sc/inc/clipcontext.hxx
+++ b/sc/inc/clipcontext.hxx
@@ -42,7 +42,7 @@ public:
     ColumnBlockPositionSet* getBlockPositionSet() { return mpSet.get(); }
 };
 
-class CopyFromClipContext final : public ClipContextBase
+class SC_DLLPUBLIC CopyFromClipContext final : public ClipContextBase
 {
     SCCOL mnDestCol1;
     SCCOL mnDestCol2;
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index e3cf5e9929a0..e129897941a2 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1600,7 +1600,7 @@ public:
     void DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScMarkData& rMark,
                                    sc::ColumnSpanSet& rBroadcastSpans );
 
-    bool CopyOneCellFromClip(sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1,
+    SC_DLLPUBLIC bool CopyOneCellFromClip(sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1,
                              SCCOL nCol2, SCROW nRow2 );
     void CopyBlockFromClip( sc::CopyFromClipContext& rCxt, SCCOL nCol1, SCROW nRow1,
                             SCCOL nCol2, SCROW nRow2, const ScMarkData& rMark,
diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx
index 26d4b43ccd98..ec8119d7a3f5 100644
--- a/sc/qa/unit/helper/qahelper.cxx
+++ b/sc/qa/unit/helper/qahelper.cxx
@@ -24,6 +24,7 @@
 #include <editeng/brushitem.hxx>
 #include <editeng/justifyitem.hxx>
 #include <formula/errorcodes.hxx>
+#include <clipcontext.hxx>
 #include <clipparam.hxx>
 #include <cppunit/Asserter.h>
 #include <cppunit/AdditionalMessage.h>
@@ -966,6 +967,19 @@ ScUndoPaste* createUndoPaste(ScDocShell& rDocSh, const ScRange& rRange, ScDocume
         &rDocSh, rRange, aMarkData, std::move(pUndoDoc), nullptr, InsertDeleteFlags::ALL, std::move(pRefUndoData), false);
 }
 
+void pasteOneCellFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocument* pClipDoc, InsertDeleteFlags eFlags)
+{
+    ScMarkData aMark(pDestDoc->GetSheetLimits());
+    aMark.SetMarkArea(rDestRange);
+    sc::CopyFromClipContext aCxt(*pDestDoc, nullptr, pClipDoc, eFlags, false, false);
+    aCxt.setDestRange(rDestRange.aStart.Col(), rDestRange.aStart.Row(),
+            rDestRange.aEnd.Col(), rDestRange.aEnd.Row());
+    aCxt.setTabRange(rDestRange.aStart.Tab(), rDestRange.aEnd.Tab());
+    pDestDoc->CopyOneCellFromClip(aCxt, rDestRange.aStart.Col(), rDestRange.aStart.Row(),
+            rDestRange.aEnd.Col(), rDestRange.aEnd.Row());
+}
+
+
 bool insertRangeNames(
     ScDocument* pDoc, ScRangeName* pNames, const RangeNameDef* p, const RangeNameDef* pEnd)
 {
diff --git a/sc/qa/unit/helper/qahelper.hxx b/sc/qa/unit/helper/qahelper.hxx
index d2e7d42c4bda..c7e3c0790e16 100644
--- a/sc/qa/unit/helper/qahelper.hxx
+++ b/sc/qa/unit/helper/qahelper.hxx
@@ -249,6 +249,9 @@ SCQAHELPER_DLLPUBLIC void pasteFromClip(ScDocument* pDestDoc, const ScRange& rDe
                                     ScDocument* pClipDoc);
 SCQAHELPER_DLLPUBLIC ScUndoPaste* createUndoPaste(ScDocShell& rDocSh, const ScRange& rRange,
                                     ScDocumentUniquePtr pUndoDoc);
+SCQAHELPER_DLLPUBLIC void pasteOneCellFromClip(ScDocument* pDestDoc, const ScRange& rDestRange,
+                                     ScDocument* pClipDoc,
+                                     InsertDeleteFlags eFlags = InsertDeleteFlags::ALL);
 
 SCQAHELPER_DLLPUBLIC ScRange insertRangeData(ScDocument* pDoc, const ScAddress& rPos,
                                    const std::vector<std::vector<const char*>>& rData);
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index ca01cf38c768..baf25789d64b 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -12378,18 +12378,6 @@ ScDocShell* Test::findLoadedDocShellByName(std::u16string_view rName)
     return nullptr;
 }
 
-void Test::pasteOneCellFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocument* pClipDoc, InsertDeleteFlags eFlags)
-{
-    ScMarkData aMark(pDestDoc->GetSheetLimits());
-    aMark.SetMarkArea(rDestRange);
-    sc::CopyFromClipContext aCxt(*pDestDoc, nullptr, pClipDoc, eFlags, false, false);
-    aCxt.setDestRange(rDestRange.aStart.Col(), rDestRange.aStart.Row(),
-            rDestRange.aEnd.Col(), rDestRange.aEnd.Row());
-    aCxt.setTabRange(rDestRange.aStart.Tab(), rDestRange.aEnd.Tab());
-    pDestDoc->CopyOneCellFromClip(aCxt, rDestRange.aStart.Col(), rDestRange.aStart.Row(),
-            rDestRange.aEnd.Col(), rDestRange.aEnd.Row());
-}
-
 void Test::setExpandRefs(bool bExpand)
 {
     ScModule* pMod = SC_MOD();
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 0909051ad969..eda9bc58490f 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -24,9 +24,6 @@ class Test : public test::BootstrapFixture
 {
 public:
     static ScDocShell* findLoadedDocShellByName(std::u16string_view rName);
-    static void pasteOneCellFromClip(ScDocument* pDestDoc, const ScRange& rDestRange,
-                                     ScDocument* pClipDoc,
-                                     InsertDeleteFlags eFlags = InsertDeleteFlags::ALL);
 
     /**
      * Enable or disable expand reference options which controls how
@@ -288,7 +285,6 @@ public:
     void testCopyPasteMultiRange();
     void testCopyPasteSkipEmpty();
     void testCopyPasteSkipEmpty2();
-    void testCopyPasteSkipEmptyConditionalFormatting();
     void testCutPasteRefUndo();
     void testCutPasteGroupRefUndo();
     void testMoveRefBetweenSheets();
@@ -357,50 +353,6 @@ public:
     void testCellTextWidth();
     void testEditTextIterator();
 
-    // conditional format tests
-    // mostly in ucalc_condformat.cxx
-    void testCondFormatINSDEL();
-    void testCondFormatInsertRow();
-    void testCondFormatInsertCol();
-    void testCondFormatInsertDeleteSheets();
-    void testCondCopyPaste();
-    void testCondCopyPasteSingleCell(); //e.g. fdo#82503
-    void testCondCopyPasteSingleCellToRange(); //e.g. fdo#82503
-    void testCondCopyPasteSingleCellIntoSameFormatRange(); // e.g., tdf#95295
-    void testCondCopyPasteSingleRowToRange(); //e.g. tdf#106242
-    void testCondCopyPasteSingleRowToRange2();
-    void testCondCopyPasteSheetBetweenDoc();
-    void testCondCopyPasteSheet();
-    void testIconSet();
-    void testDataBarLengthAutomaticAxis();
-    void testDataBarLengthMiddleAxis();
-
-    // Tests for the ScFormulaListener class
-    void testFormulaListenerSingleCellToSingleCell();
-    void testFormulaListenerMultipleCellsToSingleCell();
-    void testFormulaListenerSingleCellToMultipleCells();
-    void testFormulaListenerMultipleCellsToMultipleCells();
-    void testFormulaListenerUpdateInsertTab();
-    void testFormulaListenerUpdateDeleteTab();
-
-    // Check that the Listeners are correctly updated when we
-    // call an operation
-    void testCondFormatUpdateMoveTab();
-    void testCondFormatUpdateDeleteTab();
-    void testCondFormatUpdateInsertTab();
-    void testCondFormatUpdateReference();
-    void testCondFormatUpdateReferenceDelRow();
-    void testCondFormatUpdateReferenceInsRow();
-
-    void testCondFormatEndsWithStr();
-    void testCondFormatEndsWithVal();
-
-    void testCondFormatUndoList();
-    void testMultipleSingleCellCondFormatCopyPaste();
-    void testDeduplicateMultipleCondFormats();
-    void testCondFormatListenToOwnRange();
-    void testCondFormatVolatileFunctionRecalc();
-
     void testImportStream();
     void testDeleteContents();
     void testTransliterateText();
@@ -640,7 +592,6 @@ public:
     CPPUNIT_TEST(testCopyPasteMultiRange);
     CPPUNIT_TEST(testCopyPasteSkipEmpty);
     CPPUNIT_TEST(testCopyPasteSkipEmpty2);
-    //CPPUNIT_TEST(testCopyPasteSkipEmptyConditionalFormatting);
     CPPUNIT_TEST(testCutPasteRefUndo);
     CPPUNIT_TEST(testCutPasteGroupRefUndo);
     CPPUNIT_TEST(testMoveRefBetweenSheets);
@@ -677,35 +628,6 @@ public:
     CPPUNIT_TEST(testAnchoredRotatedShape);
     CPPUNIT_TEST(testCellTextWidth);
     CPPUNIT_TEST(testEditTextIterator);
-    CPPUNIT_TEST(testCondFormatINSDEL);
-    CPPUNIT_TEST(testCondFormatInsertRow);
-    CPPUNIT_TEST(testCondFormatInsertCol);
-    CPPUNIT_TEST(testCondFormatInsertDeleteSheets);
-    CPPUNIT_TEST(testCondCopyPaste);
-    CPPUNIT_TEST(testCondCopyPasteSingleCell);
-    CPPUNIT_TEST(testCondCopyPasteSingleCellToRange);
-    CPPUNIT_TEST(testCondCopyPasteSingleCellIntoSameFormatRange);
-    CPPUNIT_TEST(testCondCopyPasteSingleRowToRange);
-    CPPUNIT_TEST(testCondCopyPasteSingleRowToRange2);
-    CPPUNIT_TEST(testCondCopyPasteSheetBetweenDoc);
-    CPPUNIT_TEST(testCondCopyPasteSheet);
-    CPPUNIT_TEST(testCondFormatEndsWithStr);
-    CPPUNIT_TEST(testCondFormatEndsWithVal);
-    CPPUNIT_TEST(testCondFormatUpdateReferenceDelRow);
-    CPPUNIT_TEST(testCondFormatUpdateReferenceInsRow);
-    CPPUNIT_TEST(testCondFormatUndoList);
-    CPPUNIT_TEST(testMultipleSingleCellCondFormatCopyPaste);
-    CPPUNIT_TEST(testDeduplicateMultipleCondFormats);
-    CPPUNIT_TEST(testCondFormatVolatileFunctionRecalc);
-    CPPUNIT_TEST(testIconSet);
-    CPPUNIT_TEST(testDataBarLengthAutomaticAxis);
-    CPPUNIT_TEST(testDataBarLengthMiddleAxis);
-    CPPUNIT_TEST(testFormulaListenerSingleCellToSingleCell);
-    CPPUNIT_TEST(testFormulaListenerSingleCellToMultipleCells);
-    CPPUNIT_TEST(testFormulaListenerMultipleCellsToSingleCell);
-    CPPUNIT_TEST(testFormulaListenerMultipleCellsToMultipleCells);
-    CPPUNIT_TEST(testFormulaListenerUpdateInsertTab);
-    CPPUNIT_TEST(testFormulaListenerUpdateDeleteTab);
     CPPUNIT_TEST(testImportStream);
     CPPUNIT_TEST(testDeleteContents);
     CPPUNIT_TEST(testTransliterateText);
diff --git a/sc/qa/unit/ucalc_condformat.cxx b/sc/qa/unit/ucalc_condformat.cxx
index 212723a26d61..56ff357a6bb5 100644
--- a/sc/qa/unit/ucalc_condformat.cxx
+++ b/sc/qa/unit/ucalc_condformat.cxx
@@ -8,7 +8,7 @@
  */
 
 #include <memory>
-#include "ucalc.hxx"
+#include <test/bootstrapfixture.hxx>
 #include "helper/qahelper.hxx"
 
 #include <conditio.hxx>
@@ -18,6 +18,7 @@
 #include <globstr.hrc>
 #include <scresid.hxx>
 #include <docfunc.hxx>
+#include <scdll.hxx>
 #include <scitems.hxx>
 #include <attrib.hxx>
 #include <fillinfo.hxx>
@@ -26,73 +27,193 @@
 
 #include <svl/sharedstringpool.hxx>
 
-void Test::testCopyPasteSkipEmptyConditionalFormatting()
-{
-    m_pDoc->InsertTab(0, "Test");
+namespace {
 
-    ScRange aDestRange(0,0,0,1,2,0);
-    ScRange aSrcRange(3,3,0,5,4,0);
+struct ScDataBarLengthData
+{
+    double nVal;
+    double nLength;
+};
 
-    ScMarkData aMark(m_pDoc->GetSheetLimits());
-    aMark.SetMarkArea(aDestRange);
+void testDataBarLengthImpl(ScDocument* pDoc, const ScDataBarLengthData* pData, const ScRange& rRange,
+        double nMinVal, ScColorScaleEntryType eMinType,
+        double nMaxVal, ScColorScaleEntryType eMaxType,
+        double nZeroPos, databar::ScAxisPosition eAxisPos)
+{
+    std::unique_ptr<ScConditionalFormat> pFormat(new ScConditionalFormat(1, pDoc));
+    ScRangeList aRangeList(rRange);
+    pFormat->SetRange(aRangeList);
 
-    m_pDoc->SetValue(0,0,0,1);
-    m_pDoc->SetValue(1,0,0,1);
-    m_pDoc->SetValue(0,1,0,1);
-    m_pDoc->SetValue(0,2,0,1);
-    m_pDoc->SetValue(1,2,0,1);
+    SCCOL nCol = rRange.aStart.Col();
 
-    //create conditional formatting for A1:B3
-    ScConditionalFormatList* pCondFormatList = new ScConditionalFormatList();
-    m_pDoc->SetCondFormList(pCondFormatList, 0);
+    ScDataBarFormat* pDatabar = new ScDataBarFormat(pDoc);
+    pFormat->AddEntry(pDatabar);
 
-    auto pFormat = std::make_unique<ScConditionalFormat>(1, m_pDoc);
-    pFormat->SetRange(aDestRange);
-    sal_uLong nCondFormatKey = m_pDoc->AddCondFormat(std::move(pFormat), 0);
+    ScDataBarFormatData* pFormatData = new ScDataBarFormatData();
+    pFormatData->meAxisPosition = eAxisPos;
 
-    // Prepare a clipboard content interleaved with empty cells.
-    ScDocument aClipDoc(SCDOCMODE_CLIP);
-    aClipDoc.ResetClip(m_pDoc, &aMark);
-    ScClipParam aParam(aSrcRange, false);
-    aClipDoc.SetClipParam(aParam);
-    aClipDoc.SetValue(3,3,0,2);
-    aClipDoc.SetValue(4,3,0,2);
-    aClipDoc.SetValue(4,4,0,2);
-    aClipDoc.SetValue(3,5,0,2);
-    aClipDoc.SetValue(4,5,0,2);
-
-    auto pClipFormat = std::make_unique<ScConditionalFormat>(2, &aClipDoc);
-    pClipFormat->SetRange(aSrcRange);
-    aClipDoc.AddCondFormat(std::move(pClipFormat), 0);
-
-    // Create undo document.
-    ScDocument* pUndoDoc = new ScDocument(SCDOCMODE_UNDO);
-    pUndoDoc->InitUndo(*m_pDoc, 0, 0);
-    m_pDoc->CopyToDocument(aDestRange, InsertDeleteFlags::CONTENTS, false, *pUndoDoc, &aMark);
-
-    // Paste clipboard content onto A1:A5 but skip empty cells.
-    m_pDoc->CopyFromClip(aDestRange, aMark, InsertDeleteFlags::CONTENTS, pUndoDoc, &aClipDoc, true, false, false, true/*bSkipEmpty*/);
+    pFormatData->mpLowerLimit.reset(new ScColorScaleEntry());
+    pFormatData->mpLowerLimit->SetValue(nMinVal);
+    pFormatData->mpLowerLimit->SetType(eMinType);
+    pFormatData->mpUpperLimit.reset(new ScColorScaleEntry());
+    pFormatData->mpUpperLimit->SetValue(nMaxVal);
+    pFormatData->mpUpperLimit->SetType(eMaxType);
+    pDatabar->SetDataBarData(pFormatData);
 
-    ScConditionalFormatList* pList = m_pDoc->GetCondFormList(0);
-    CPPUNIT_ASSERT_EQUAL(size_t(2), pList->size());
-    CPPUNIT_ASSERT(m_pDoc->GetCondFormat(1,1,0));
-    // empty cell in copy area does not overwrite conditional formatting
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(nCondFormatKey), m_pDoc->GetCondFormat(1,1,0)->GetKey());
-    for(SCCOL nCol = 0; nCol <= 1; ++nCol)
+    for (size_t i = 0; pData[i].nLength != -200; ++i)
     {
-        for(SCROW nRow = 0; nRow <= 2; ++nRow)
-        {
-            if(nRow == 1 && nCol == 1)
-                continue;
+        pDoc->SetValue(nCol, i, 0, pData[i].nVal);
+    }
 
-            CPPUNIT_ASSERT(m_pDoc->GetCondFormat(nCol, nRow, 0));
-            CPPUNIT_ASSERT(nCondFormatKey != m_pDoc->GetCondFormat(nCol, nRow, 0)->GetKey());
-        }
+    for (size_t i = 0; pData[i].nLength != -200; ++i)
+    {
+        std::unique_ptr<ScDataBarInfo> xInfo(pDatabar->GetDataBarInfo(ScAddress(nCol, i, 0)));
+        CPPUNIT_ASSERT(xInfo);
+        ASSERT_DOUBLES_EQUAL(pData[i].nLength, xInfo->mnLength);
+        ASSERT_DOUBLES_EQUAL(nZeroPos, xInfo->mnZero);
     }
-    m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatINSDEL()
+sal_uInt32 addSingleCellCondFormat(ScDocument* pDoc, const ScAddress& rAddr, sal_uInt32 nKey, const OUString& rCondition)
+{
+    auto pFormat = std::make_unique<ScConditionalFormat>(nKey, pDoc);
+    ScRange aCondFormatRange(rAddr);
+    ScRangeList aRangeList(aCondFormatRange);
+    pFormat->SetRange(aRangeList);
+
+    ScCondFormatEntry* pEntry = new ScCondFormatEntry(ScConditionMode::Direct, rCondition, "",
+            *pDoc, ScAddress(0,0,0), ScResId(STR_STYLENAME_RESULT));
+    pFormat->AddEntry(pEntry);
+    return pDoc->AddCondFormat(std::move(pFormat), 0);
+}
+
+}
+
+
+class TestCondformat : public test::BootstrapFixture
+{
+public:
+    TestCondformat();
+
+    virtual void setUp() override;
+    virtual void tearDown() override;
+
+    void testCondFormatINSDEL();
+    void testCondFormatInsertRow();
+    void testCondFormatInsertCol();
+    void testCondFormatInsertDeleteSheets();
+    void testCondCopyPaste();
+    void testCondCopyPasteSingleCell(); //e.g. fdo#82503
+    void testCondCopyPasteSingleCellToRange(); //e.g. fdo#82503
+    void testCondCopyPasteSingleCellIntoSameFormatRange(); // e.g., tdf#95295
+    void testCondCopyPasteSingleRowToRange(); //e.g. tdf#106242
+    void testCondCopyPasteSingleRowToRange2();
+    void testCondCopyPasteSheetBetweenDoc();
+    void testCondCopyPasteSheet();
+
+    void testIconSet();
+    void testDataBarLengthAutomaticAxis();
+    void testDataBarLengthMiddleAxis();
+
+    // Tests for the ScFormulaListener class
+    void testFormulaListenerSingleCellToSingleCell();
+    void testFormulaListenerMultipleCellsToSingleCell();
+    void testFormulaListenerSingleCellToMultipleCells();
+    void testFormulaListenerMultipleCellsToMultipleCells();
+    void testFormulaListenerUpdateInsertTab();
+    void testFormulaListenerUpdateDeleteTab();
+
+    // Check that the Listeners are correctly updated when we
+    // call an operation
+    void testCondFormatUpdateMoveTab();
+    void testCondFormatUpdateDeleteTab();
+    void testCondFormatUpdateInsertTab();
+    void testCondFormatUpdateReference();
+    void testCondFormatUpdateReferenceDelRow();
+    void testCondFormatUpdateReferenceInsRow();
+
+    void testCondFormatEndsWithStr();
+    void testCondFormatEndsWithVal();
+
+    void testCondFormatUndoList();
+    void testMultipleSingleCellCondFormatCopyPaste();
+    void testDeduplicateMultipleCondFormats();
+    void testCondFormatListenToOwnRange();
+    void testCondFormatVolatileFunctionRecalc();
+
+    CPPUNIT_TEST_SUITE(TestCondformat);
+
+    CPPUNIT_TEST(testCondFormatINSDEL);
+    CPPUNIT_TEST(testCondFormatInsertRow);
+    CPPUNIT_TEST(testCondFormatInsertCol);
+    CPPUNIT_TEST(testCondFormatInsertDeleteSheets);
+    CPPUNIT_TEST(testCondCopyPaste);
+    CPPUNIT_TEST(testCondCopyPasteSingleCell);
+    CPPUNIT_TEST(testCondCopyPasteSingleCellToRange);
+    CPPUNIT_TEST(testCondCopyPasteSingleCellIntoSameFormatRange);
+    CPPUNIT_TEST(testCondCopyPasteSingleRowToRange);
+    CPPUNIT_TEST(testCondCopyPasteSingleRowToRange2);
+    CPPUNIT_TEST(testCondCopyPasteSheetBetweenDoc);
+    CPPUNIT_TEST(testCondCopyPasteSheet);
+    CPPUNIT_TEST(testCondFormatEndsWithStr);
+    CPPUNIT_TEST(testCondFormatEndsWithVal);
+    CPPUNIT_TEST(testCondFormatUpdateMoveTab);
+    CPPUNIT_TEST(testCondFormatUpdateDeleteTab);
+    CPPUNIT_TEST(testCondFormatUpdateInsertTab);
+    CPPUNIT_TEST(testCondFormatUpdateReference);
+    CPPUNIT_TEST(testCondFormatUpdateReferenceDelRow);
+    CPPUNIT_TEST(testCondFormatUpdateReferenceInsRow);
+    CPPUNIT_TEST(testCondFormatUndoList);
+    CPPUNIT_TEST(testMultipleSingleCellCondFormatCopyPaste);
+    CPPUNIT_TEST(testDeduplicateMultipleCondFormats);
+    CPPUNIT_TEST(testCondFormatListenToOwnRange);
+    CPPUNIT_TEST(testCondFormatVolatileFunctionRecalc);
+    CPPUNIT_TEST(testIconSet);
+    CPPUNIT_TEST(testDataBarLengthAutomaticAxis);
+    CPPUNIT_TEST(testDataBarLengthMiddleAxis);
+    CPPUNIT_TEST(testFormulaListenerSingleCellToSingleCell);
+    CPPUNIT_TEST(testFormulaListenerSingleCellToMultipleCells);
+    CPPUNIT_TEST(testFormulaListenerMultipleCellsToSingleCell);
+    CPPUNIT_TEST(testFormulaListenerMultipleCellsToMultipleCells);
+    CPPUNIT_TEST(testFormulaListenerUpdateInsertTab);
+    CPPUNIT_TEST(testFormulaListenerUpdateDeleteTab);
+
+    CPPUNIT_TEST_SUITE_END();
+
+private:
+    ScDocShellRef m_xDocShell;
+    ScDocument* m_pDoc;
+};
+
+TestCondformat::TestCondformat()
+{
+}
+
+void TestCondformat::setUp()
+{
+    BootstrapFixture::setUp();
+
+    ScDLL::Init();
+
+    m_xDocShell = new ScDocShell(
+        SfxModelFlags::EMBEDDED_OBJECT |
+        SfxModelFlags::DISABLE_EMBEDDED_SCRIPTS |
+        SfxModelFlags::DISABLE_DOCUMENT_RECOVERY);
+    m_xDocShell->SetIsInUcalc();
+    m_xDocShell->DoInitUnitTest();
+
+    m_pDoc = &m_xDocShell->GetDocument();
+}
+
+void TestCondformat::tearDown()
+{
+    m_xDocShell->DoClose();
+    m_xDocShell.clear();
+
+    test::BootstrapFixture::tearDown();
+}
+
+void TestCondformat::testCondFormatINSDEL()
 {
     // fdo#62206
     m_pDoc->InsertTab(0, "Test");
@@ -118,7 +239,7 @@ void Test::testCondFormatINSDEL()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatInsertCol()
+void TestCondformat::testCondFormatInsertCol()
 {
     m_pDoc->InsertTab(0, "Test");
     ScConditionalFormatList* pList = m_pDoc->GetCondFormList(0);
@@ -141,7 +262,7 @@ void Test::testCondFormatInsertCol()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatInsertRow()
+void TestCondformat::testCondFormatInsertRow()
 {
     m_pDoc->InsertTab(0, "Test");
     ScConditionalFormatList* pList = m_pDoc->GetCondFormList(0);
@@ -164,7 +285,7 @@ void Test::testCondFormatInsertRow()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatInsertDeleteSheets()
+void TestCondformat::testCondFormatInsertDeleteSheets()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -196,7 +317,7 @@ void Test::testCondFormatInsertDeleteSheets()
     CPPUNIT_ASSERT(pRange);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Format should be applied to B2:B4.", ScRange(1,1,0,1,3,0), *pRange);
 
-    ScDocFunc& rFunc = getDocShell().GetDocFunc();
+    ScDocFunc& rFunc = m_xDocShell->GetDocFunc();
 
     // Insert a new sheet at the left.
     bool bInserted = rFunc.InsertTable(0, "Inserted", true, true);
@@ -271,7 +392,7 @@ void Test::testCondFormatInsertDeleteSheets()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPaste()
+void TestCondformat::testCondCopyPaste()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -310,7 +431,7 @@ void Test::testCondCopyPaste()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSingleCell()
+void TestCondformat::testCondCopyPasteSingleCell()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -349,7 +470,7 @@ void Test::testCondCopyPasteSingleCell()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSingleCellToRange()
+void TestCondformat::testCondCopyPasteSingleCellToRange()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -394,7 +515,7 @@ void Test::testCondCopyPasteSingleCellToRange()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSingleCellIntoSameFormatRange()
+void TestCondformat::testCondCopyPasteSingleCellIntoSameFormatRange()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -431,7 +552,7 @@ void Test::testCondCopyPasteSingleCellIntoSameFormatRange()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSingleRowToRange()
+void TestCondformat::testCondCopyPasteSingleRowToRange()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -463,7 +584,7 @@ void Test::testCondCopyPasteSingleRowToRange()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSingleRowToRange2()
+void TestCondformat::testCondCopyPasteSingleRowToRange2()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -493,7 +614,7 @@ void Test::testCondCopyPasteSingleRowToRange2()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSheetBetweenDoc()
+void TestCondformat::testCondCopyPasteSheetBetweenDoc()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -515,7 +636,7 @@ void Test::testCondCopyPasteSheetBetweenDoc()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondCopyPasteSheet()
+void TestCondformat::testCondCopyPasteSheet()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -548,7 +669,7 @@ void Test::testCondCopyPasteSheet()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testIconSet()
+void TestCondformat::testIconSet()
 {
     m_pDoc->InsertTab(0, "Test");
     ScConditionalFormatList* pList = m_pDoc->GetCondFormList(0);
@@ -587,56 +708,7 @@ void Test::testIconSet()
     m_pDoc->DeleteTab(0);
 }
 
-namespace {
-
-struct ScDataBarLengthData
-{
-    double nVal;
-    double nLength;
-};
-
-void testDataBarLengthImpl(ScDocument* pDoc, const ScDataBarLengthData* pData, const ScRange& rRange,
-        double nMinVal, ScColorScaleEntryType eMinType,
-        double nMaxVal, ScColorScaleEntryType eMaxType,
-        double nZeroPos, databar::ScAxisPosition eAxisPos)
-{
-    std::unique_ptr<ScConditionalFormat> pFormat(new ScConditionalFormat(1, pDoc));
-    ScRangeList aRangeList(rRange);
-    pFormat->SetRange(aRangeList);
-
-    SCCOL nCol = rRange.aStart.Col();
-
-    ScDataBarFormat* pDatabar = new ScDataBarFormat(pDoc);
-    pFormat->AddEntry(pDatabar);
-
-    ScDataBarFormatData* pFormatData = new ScDataBarFormatData();
-    pFormatData->meAxisPosition = eAxisPos;
-
-    pFormatData->mpLowerLimit.reset(new ScColorScaleEntry());
-    pFormatData->mpLowerLimit->SetValue(nMinVal);
-    pFormatData->mpLowerLimit->SetType(eMinType);
-    pFormatData->mpUpperLimit.reset(new ScColorScaleEntry());
-    pFormatData->mpUpperLimit->SetValue(nMaxVal);
-    pFormatData->mpUpperLimit->SetType(eMaxType);
-    pDatabar->SetDataBarData(pFormatData);
-
-    for (size_t i = 0; pData[i].nLength != -200; ++i)
-    {
-        pDoc->SetValue(nCol, i, 0, pData[i].nVal);
-    }
-
-    for (size_t i = 0; pData[i].nLength != -200; ++i)
-    {
-        std::unique_ptr<ScDataBarInfo> xInfo(pDatabar->GetDataBarInfo(ScAddress(nCol, i, 0)));
-        CPPUNIT_ASSERT(xInfo);
-        ASSERT_DOUBLES_EQUAL(pData[i].nLength, xInfo->mnLength);
-        ASSERT_DOUBLES_EQUAL(nZeroPos, xInfo->mnZero);
-    }
-}
-
-}
-
-void Test::testDataBarLengthAutomaticAxis()
+void TestCondformat::testDataBarLengthAutomaticAxis()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -700,7 +772,7 @@ void Test::testDataBarLengthAutomaticAxis()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testDataBarLengthMiddleAxis()
+void TestCondformat::testDataBarLengthMiddleAxis()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -745,7 +817,7 @@ void Test::testDataBarLengthMiddleAxis()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatEndsWithStr()
+void TestCondformat::testCondFormatEndsWithStr()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -763,7 +835,7 @@ void Test::testCondFormatEndsWithStr()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatEndsWithVal()
+void TestCondformat::testCondFormatEndsWithVal()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -783,7 +855,7 @@ void Test::testCondFormatEndsWithVal()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testFormulaListenerSingleCellToSingleCell()
+void TestCondformat::testFormulaListenerSingleCellToSingleCell()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -801,7 +873,7 @@ void Test::testFormulaListenerSingleCellToSingleCell()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testFormulaListenerSingleCellToMultipleCells()
+void TestCondformat::testFormulaListenerSingleCellToMultipleCells()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -819,7 +891,7 @@ void Test::testFormulaListenerSingleCellToMultipleCells()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testFormulaListenerMultipleCellsToSingleCell()
+void TestCondformat::testFormulaListenerMultipleCellsToSingleCell()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -837,7 +909,7 @@ void Test::testFormulaListenerMultipleCellsToSingleCell()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testFormulaListenerMultipleCellsToMultipleCells()
+void TestCondformat::testFormulaListenerMultipleCellsToMultipleCells()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -855,7 +927,7 @@ void Test::testFormulaListenerMultipleCellsToMultipleCells()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testFormulaListenerUpdateInsertTab()
+void TestCondformat::testFormulaListenerUpdateInsertTab()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -879,7 +951,7 @@ void Test::testFormulaListenerUpdateInsertTab()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testFormulaListenerUpdateDeleteTab()
+void TestCondformat::testFormulaListenerUpdateDeleteTab()
 {
     m_pDoc->InsertTab(0, "test");
     m_pDoc->InsertTab(0, "to_delete");
@@ -900,7 +972,7 @@ void Test::testFormulaListenerUpdateDeleteTab()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUpdateMoveTab()
+void TestCondformat::testCondFormatUpdateMoveTab()
 {
     m_pDoc->InsertTab(0, "test");
     m_pDoc->InsertTab(1, "Test2");
@@ -937,7 +1009,7 @@ void Test::testCondFormatUpdateMoveTab()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUpdateInsertTab()
+void TestCondformat::testCondFormatUpdateInsertTab()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -976,7 +1048,7 @@ void Test::testCondFormatUpdateInsertTab()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUpdateDeleteTab()
+void TestCondformat::testCondFormatUpdateDeleteTab()
 {
     m_pDoc->InsertTab(0, "test");
     m_pDoc->InsertTab(1, "Test2");
@@ -1009,7 +1081,7 @@ void Test::testCondFormatUpdateDeleteTab()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUpdateReference()
+void TestCondformat::testCondFormatUpdateReference()
 {
     m_pDoc->InsertTab(0, "test");
     m_pDoc->InsertTab(1, "Test2");
@@ -1034,7 +1106,7 @@ void Test::testCondFormatUpdateReference()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUpdateReferenceDelRow()
+void TestCondformat::testCondFormatUpdateReferenceDelRow()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -1055,7 +1127,7 @@ void Test::testCondFormatUpdateReferenceDelRow()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUpdateReferenceInsRow()
+void TestCondformat::testCondFormatUpdateReferenceInsRow()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -1076,7 +1148,7 @@ void Test::testCondFormatUpdateReferenceInsRow()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatUndoList()
+void TestCondformat::testCondFormatUndoList()
 {
     m_pDoc->InsertTab(0, "test");
 
@@ -1089,7 +1161,7 @@ void Test::testCondFormatUndoList()
     m_pDoc->AddCondFormat(std::move(pFormat), 0);
     m_pDoc->AddCondFormatData(pFormatTmp->GetRange(), 0, pFormatTmp->GetKey());
 
-    ScDocFunc& rFunc = getDocShell().GetDocFunc();
+    ScDocFunc& rFunc = m_xDocShell->GetDocFunc();
 
     CPPUNIT_ASSERT_EQUAL(size_t(1), m_pDoc->GetCondFormList(0)->size());
     for (SCROW nRow = 0; nRow <= 5; ++nRow)
@@ -1118,24 +1190,7 @@ void Test::testCondFormatUndoList()
     m_pDoc->DeleteTab(0);
 }
 
-namespace {
-
-sal_uInt32 addSingleCellCondFormat(ScDocument* pDoc, const ScAddress& rAddr, sal_uInt32 nKey, const OUString& rCondition)
-{
-    auto pFormat = std::make_unique<ScConditionalFormat>(nKey, pDoc);
-    ScRange aCondFormatRange(rAddr);
-    ScRangeList aRangeList(aCondFormatRange);
-    pFormat->SetRange(aRangeList);
-
-    ScCondFormatEntry* pEntry = new ScCondFormatEntry(ScConditionMode::Direct, rCondition, "",
-            *pDoc, ScAddress(0,0,0), ScResId(STR_STYLENAME_RESULT));
-    pFormat->AddEntry(pEntry);
-    return pDoc->AddCondFormat(std::move(pFormat), 0);
-}
-
-}
-
-void Test::testMultipleSingleCellCondFormatCopyPaste()
+void TestCondformat::testMultipleSingleCellCondFormatCopyPaste()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -1167,7 +1222,7 @@ void Test::testMultipleSingleCellCondFormatCopyPaste()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testDeduplicateMultipleCondFormats()
+void TestCondformat::testDeduplicateMultipleCondFormats()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -1199,7 +1254,7 @@ void Test::testDeduplicateMultipleCondFormats()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatListenToOwnRange()
+void TestCondformat::testCondFormatListenToOwnRange()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -1233,7 +1288,7 @@ void Test::testCondFormatListenToOwnRange()
     m_pDoc->DeleteTab(0);
 }
 
-void Test::testCondFormatVolatileFunctionRecalc()
+void TestCondformat::testCondFormatVolatileFunctionRecalc()
 {
     m_pDoc->InsertTab(0, "Test");
 
@@ -1272,4 +1327,8 @@ void Test::testCondFormatVolatileFunctionRecalc()
     m_pDoc->DeleteTab(0);
 }
 
+CPPUNIT_TEST_SUITE_REGISTRATION(TestCondformat);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list