diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist index 717bf0c00305..9891f07f2f3c 100644 --- a/solenv/clang-format/blacklist +++ b/solenv/clang-format/blacklist @@ -15078,6 +15078,7 @@ sw/qa/extras/ooxmlexport/ooxmlencryption.cxx sw/qa/extras/ooxmlexport/ooxmlexport.cxx sw/qa/extras/ooxmlexport/ooxmlexport10.cxx sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +sw/qa/extras/ooxmlexport/ooxmlexport13.cxx sw/qa/extras/ooxmlexport/ooxmlexport2.cxx sw/qa/extras/ooxmlexport/ooxmlexport3.cxx sw/qa/extras/ooxmlexport/ooxmlexport4.cxx diff --git a/sw/CppunitTest_sw_ooxmlexport13.mk b/sw/CppunitTest_sw_ooxmlexport13.mk new file mode 100644 index 000000000000..22d8ebe3a1a8 --- /dev/null +++ b/sw/CppunitTest_sw_ooxmlexport13.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 sw_ooxmlexport_test,13)) + +# vim: set noet sw=4 ts=4: diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk index 843553c43ca2..bfcb358343a5 100644 --- a/sw/Module_sw.mk +++ b/sw/Module_sw.mk @@ -73,6 +73,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\ CppunitTest_sw_ooxmlexport10 \ CppunitTest_sw_ooxmlexport11 \ CppunitTest_sw_ooxmlexport12 \ + CppunitTest_sw_ooxmlexport13 \ CppunitTest_sw_ooxmlexport_template \ CppunitTest_sw_ooxmlfieldexport \ CppunitTest_sw_ooxmllinks \ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt new file mode 100644 index 000000000000..392fae1b6624 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc new file mode 100644 index 000000000000..56a33d260e0e Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx new file mode 100644 index 000000000000..b3d0a219c5cc --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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/. + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {} + +protected: + /** + * Blacklist handling + */ + bool mustTestImportOf(const char* filename) const override { + // If the testcase is stored in some other format, it's pointless to test. + return OString(filename).endsWith(".docx"); + } +}; + +DECLARE_OOXMLEXPORT_TEST(testTdf121374_sectionHF, "tdf121374_sectionHF.odt") +{ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + uno::Reference xFooterText = getProperty< uno::Reference >(xPageStyle, "FooterText"); + CPPUNIT_ASSERT_EQUAL( OUString("footer"), xFooterText->getString() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 6, getParagraphs() ); + //CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 6, getPages() ); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf121374_sectionHF2, "tdf121374_sectionHF2.doc") +{ + uno::Reference xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY); + uno::Reference xHeaderText = getProperty< uno::Reference >(xPageStyle, "HeaderText"); + CPPUNIT_ASSERT( xHeaderText->getString().startsWith("virkamatka-anomus") ); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx index bd662172ae0c..4a7118cf56cd 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx @@ -1035,7 +1035,8 @@ DECLARE_OOXMLEXPORT_TEST(testSectionHeader, "sectionprot.odt") { if (xmlDocPtr pXmlDoc = parseExport("word/document.xml")) { - assertXPath(pXmlDoc, "//w:headerReference", 1); + // this test must not be zero + assertXPath(pXmlDoc, "//w:headerReference", 2); } } diff --git a/sw/source/filter/ww8/wrtw8sty.cxx b/sw/source/filter/ww8/wrtw8sty.cxx index fa0aa300710c..286a613e8e62 100644 --- a/sw/source/filter/ww8/wrtw8sty.cxx +++ b/sw/source/filter/ww8/wrtw8sty.cxx @@ -1537,6 +1537,7 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt */ sal_uInt8 nBreakCode = 2; // default start new page bool bOutPgDscSet = true, bLeftRightPgChain = false, bOutputStyleItemSet = false; + bool bEnsureHeaderFooterWritten = rSepInfo.pSectionFormat && rSepInfo.bIsFirstParagraph; const SwFrameFormat* pPdFormat = &pPd->GetMaster(); if ( rSepInfo.pSectionFormat ) { @@ -1553,7 +1554,9 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt } } - if ( reinterpret_cast(sal_IntPtr(-1)) != rSepInfo.pSectionFormat ) + if ( reinterpret_cast(sal_IntPtr(-1)) == rSepInfo.pSectionFormat ) + bEnsureHeaderFooterWritten |= !rSepInfo.pPDNd && GetExportFormat() == ExportFormat::DOCX; + else { if ( nBreakCode == 0 ) bOutPgDscSet = false; @@ -1715,7 +1718,7 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt : &pPd->GetLeft(); // Ensure that headers are written if section is first paragraph - if ( nBreakCode != 0 || ( rSepInfo.pSectionFormat && rSepInfo.bIsFirstParagraph )) + if ( nBreakCode != 0 || bEnsureHeaderFooterWritten ) { if ( titlePage ) {