diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2021-06-15 13:35:57 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2021-06-17 15:03:29 +0200 |
commit | 9ef167c38495a67639366357833041b33be3f978 (patch) | |
tree | 77b910f907c607cd9ddbb9bac8134a4f97d96259 /tools | |
parent | 1da7d73eeaaff43e4f3e8a61ad77fcec3c7aaed8 (diff) |
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@gmail.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/CppunitTest_tools_test.mk | 1 | ||||
-rw-r--r-- | tools/qa/cppunit/test_xmlwriter.cxx | 71 | ||||
-rw-r--r-- | tools/source/xml/XmlWriter.cxx | 5 |
3 files changed, 75 insertions, 2 deletions
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; |