[Libreoffice-commits] core.git: tools/CppunitTest_tools_test.mk tools/qa tools/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Thu Jun 17 13:04:18 UTC 2021


 tools/CppunitTest_tools_test.mk     |    1 
 tools/qa/cppunit/test_xmlwriter.cxx |   71 ++++++++++++++++++++++++++++++++++++
 tools/source/xml/XmlWriter.cxx      |    5 +-
 3 files changed, 75 insertions(+), 2 deletions(-)

New commits:
commit 9ef167c38495a67639366357833041b33be3f978
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Tue Jun 15 13:35:57 2021 +0900
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Jun 17 15:03:29 2021 +0200

    tools: handle special chars correctly in XmlHandler + test
    
    Add the char encoding handler when calling xmlOutputBufferCreateIO
    so that special chars are handled correctly. Previously we just
    set nullptr.
    
    Change-Id: I7ef44130869625cc4662bf168550a3f987390287
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117355
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/tools/CppunitTest_tools_test.mk b/tools/CppunitTest_tools_test.mk
index 96fb96b08117..096b3ddb1835 100644
--- a/tools/CppunitTest_tools_test.mk
+++ b/tools/CppunitTest_tools_test.mk
@@ -31,6 +31,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,tools_test, \
     tools/qa/cppunit/test_100mm2twips \
     tools/qa/cppunit/test_fround \
     tools/qa/cppunit/test_xmlwalker \
+    tools/qa/cppunit/test_xmlwriter \
     tools/qa/cppunit/test_GenericTypeSerializer \
     tools/qa/cppunit/test_cpuid \
     tools/qa/cppunit/test_cpu_runtime_detection_AVX2 \
diff --git a/tools/qa/cppunit/test_xmlwriter.cxx b/tools/qa/cppunit/test_xmlwriter.cxx
new file mode 100644
index 000000000000..1cd207a4afe5
--- /dev/null
+++ b/tools/qa/cppunit/test_xmlwriter.cxx
@@ -0,0 +1,71 @@
+/* -*- 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 <cppunit/extensions/HelperMacros.h>
+#include <test/bootstrapfixture.hxx>
+#include <rtl/ustring.hxx>
+#include <tools/stream.hxx>
+#include <tools/XmlWriter.hxx>
+
+namespace
+{
+class XmlWriterTest : public test::BootstrapFixture
+{
+public:
+    XmlWriterTest()
+        : BootstrapFixture(true, false)
+    {
+    }
+
+    virtual void setUp() override {}
+
+    void testSimpleRoot();
+    void testSpecialChars();
+
+    CPPUNIT_TEST_SUITE(XmlWriterTest);
+    CPPUNIT_TEST(testSimpleRoot);
+    CPPUNIT_TEST(testSpecialChars);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+void XmlWriterTest::testSimpleRoot()
+{
+    SvMemoryStream aMemoryStream;
+
+    tools::XmlWriter aWriter(&aMemoryStream);
+    aWriter.startDocument(0, false);
+    aWriter.startElement("test");
+    aWriter.endElement();
+    aWriter.endDocument();
+
+    aMemoryStream.Seek(0);
+    OString aString(static_cast<const char*>(aMemoryStream.GetData()), aMemoryStream.GetSize());
+    CPPUNIT_ASSERT_EQUAL(OString("<test/>"), aString);
+}
+
+void XmlWriterTest::testSpecialChars()
+{
+    SvMemoryStream aMemoryStream;
+
+    tools::XmlWriter aWriter(&aMemoryStream);
+    aWriter.startDocument(0, false);
+    aWriter.startElement("test");
+    aWriter.content("<>");
+    aWriter.endElement();
+    aWriter.endDocument();
+
+    aMemoryStream.Seek(0);
+    OString aString(static_cast<const char*>(aMemoryStream.GetData()), aMemoryStream.GetSize());
+    CPPUNIT_ASSERT_EQUAL(OString("<test><></test>"), aString);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(XmlWriterTest);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/xml/XmlWriter.cxx b/tools/source/xml/XmlWriter.cxx
index 93c4f0cdea96..726b63966045 100644
--- a/tools/source/xml/XmlWriter.cxx
+++ b/tools/source/xml/XmlWriter.cxx
@@ -59,8 +59,9 @@ XmlWriter::~XmlWriter()
 bool XmlWriter::startDocument(sal_Int32 nIndent, bool bWriteXmlHeader)
 {
     mpImpl->mbWriteXmlHeader = bWriteXmlHeader;
-    xmlOutputBufferPtr xmlOutBuffer
-        = xmlOutputBufferCreateIO(funcWriteCallback, funcCloseCallback, mpImpl->mpStream, nullptr);
+    xmlCharEncodingHandlerPtr pEncodingHandler = xmlGetCharEncodingHandler(XML_CHAR_ENCODING_UTF8);
+    xmlOutputBufferPtr xmlOutBuffer = xmlOutputBufferCreateIO(funcWriteCallback, funcCloseCallback,
+                                                              mpImpl->mpStream, pEncodingHandler);
     mpImpl->mpWriter = xmlNewTextWriter(xmlOutBuffer);
     if (mpImpl->mpWriter == nullptr)
         return false;


More information about the Libreoffice-commits mailing list