diff options
author | Vladimir Surjaninov <vsurjaninov@gmail.com> | 2019-03-27 08:58:49 +0300 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2019-03-27 07:58:49 +0200 |
commit | 384b81d923addd52125e94470b11d2574ca266a9 (patch) | |
tree | b0482ea447e6a9123c9e6f46fffaf8edb49faa51 | |
parent | f760610bddd7e8f8ac0914d5d59ef806bc16a73b (diff) | |
download | cpython-git-384b81d923addd52125e94470b11d2574ca266a9.tar.gz |
bpo-36407: Fix writing indentations of CDATA section (xml.dom.minidom). (GH-12514)
-rw-r--r-- | Lib/test/test_minidom.py | 16 | ||||
-rw-r--r-- | Lib/xml/dom/minidom.py | 3 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst | 2 |
3 files changed, 20 insertions, 1 deletions
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py index f3ef958b53..70965854ed 100644 --- a/Lib/test/test_minidom.py +++ b/Lib/test/test_minidom.py @@ -1631,5 +1631,21 @@ class MinidomTest(unittest.TestCase): '<?xml version="1.0" ?>\n' '<curriculum status="public" company="example"/>\n') + def test_toprettyxml_with_cdata(self): + xml_str = '<?xml version="1.0" ?><root><node><![CDATA[</data>]]></node></root>' + doc = parseString(xml_str) + self.assertEqual(doc.toprettyxml(), + '<?xml version="1.0" ?>\n' + '<root>\n' + '\t<node><![CDATA[</data>]]></node>\n' + '</root>\n') + + def test_cdata_parsing(self): + xml_str = '<?xml version="1.0" ?><root><node><![CDATA[</data>]]></node></root>' + dom1 = parseString(xml_str) + self.checkWholeText(dom1.getElementsByTagName('node')[0].firstChild, '</data>') + dom2 = parseString(dom1.toprettyxml()) + self.checkWholeText(dom2.getElementsByTagName('node')[0].firstChild, '</data>') + if __name__ == "__main__": unittest.main() diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py index 43569ddcbe..464420b765 100644 --- a/Lib/xml/dom/minidom.py +++ b/Lib/xml/dom/minidom.py @@ -862,7 +862,8 @@ class Element(Node): if self.childNodes: writer.write(">") if (len(self.childNodes) == 1 and - self.childNodes[0].nodeType == Node.TEXT_NODE): + self.childNodes[0].nodeType in ( + Node.TEXT_NODE, Node.CDATA_SECTION_NODE)): self.childNodes[0].writexml(writer, '', '', '') else: writer.write(newl) diff --git a/Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst b/Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst new file mode 100644 index 0000000000..3873329a51 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst @@ -0,0 +1,2 @@ +Fixed wrong indentation writing for CDATA section in xml.dom.minidom. +Patch by Vladimir Surjaninov. |