tdf#148835 don't write any sparkline xml elements if none exists

Change-Id: Idd4058a88639cebceded13110dc367e74b6f7097
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134141
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
diff --git a/sc/qa/unit/SparklineImportExportTest.cxx b/sc/qa/unit/SparklineImportExportTest.cxx
index 3ae19881..d5d2c38 100644
--- a/sc/qa/unit/SparklineImportExportTest.cxx
+++ b/sc/qa/unit/SparklineImportExportTest.cxx
@@ -47,17 +47,20 @@ public:

    virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathContextPtr) override
    {
        XmlTestTools::registerOOXMLNamespaces(pXmlXPathContextPtr);
        XmlTestTools::registerODFNamespaces(pXmlXPathContextPtr);
    }

    void testSparklinesRoundtripXLSX();
    void testSparklinesExportODS();
    void testSparklinesRoundtripODS();
    void testNoSparklinesInDocumentXLSX();

    CPPUNIT_TEST_SUITE(SparklineImportExportTest);
    CPPUNIT_TEST(testSparklinesRoundtripXLSX);
    CPPUNIT_TEST(testSparklinesExportODS);
    CPPUNIT_TEST(testSparklinesRoundtripODS);
    CPPUNIT_TEST(testNoSparklinesInDocumentXLSX);
    CPPUNIT_TEST_SUITE_END();
};

@@ -238,6 +241,25 @@ void SparklineImportExportTest::testSparklinesRoundtripODS()
    xDocSh->DoClose();
}

void SparklineImportExportTest::testNoSparklinesInDocumentXLSX()
{
    // tdf#148835
    // Check no sparkline elements are written when there is none in the document

    // Load the document containing NO sparklines
    ScDocShellRef xDocSh = loadDoc(u"empty.", FORMAT_XLSX);

    std::shared_ptr<utl::TempFile> pXPathFile = ScBootstrapFixture::exportTo(*xDocSh, FORMAT_XLSX);
    xmlDocUniquePtr pXmlDoc
        = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/worksheets/sheet1.xml");
    CPPUNIT_ASSERT(pXmlDoc);

    assertXPath(pXmlDoc, "/x:worksheet", 1);
    assertXPath(pXmlDoc, "/x:worksheet/x:extLst/x:ext/x14:sparklineGroups", 0);
    assertXPath(pXmlDoc, "/x:worksheet/x:extLst/x:ext", 0);
    assertXPath(pXmlDoc, "/x:worksheet/x:extLst", 0);
}

CPPUNIT_TEST_SUITE_REGISTRATION(SparklineImportExportTest);

CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/source/filter/excel/export/SparklineExt.cxx b/sc/source/filter/excel/export/SparklineExt.cxx
index 5202c3e..487698e 100644
--- a/sc/source/filter/excel/export/SparklineExt.cxx
+++ b/sc/source/filter/excel/export/SparklineExt.cxx
@@ -230,7 +230,12 @@ void SparklineExt::addSparklineGroup(XclExpXmlStream& rStream, sc::SparklineGrou
SparklineBuffer::SparklineBuffer(const XclExpRoot& rRoot, XclExtLstRef const& xExtLst)
    : XclExpRoot(rRoot)
{
    xExtLst->AddRecord(new xcl::exp::SparklineExt(GetRoot()));
    auto& rDocument = GetDoc();
    auto* pSparklineList = rDocument.GetSparklineList(GetCurrScTab());
    if (pSparklineList && !pSparklineList->getSparklineGroups().empty())
    {
        xExtLst->AddRecord(new xcl::exp::SparklineExt(GetRoot()));
    }
}

} // end namespace xcl::exp