From 727adc8a053402d3e9a38424ff67bde697674156 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Mon, 23 Jul 2018 16:16:42 -0400 Subject: Improve serializer test coverage Should be 100% coverage now. The ProcessingInstruction needed to be imported directly from ElementTree as PY27 was using a PIProxy which resulted in a bug. Interestingly, PY3 worked fine. Also removed the encoding code as it was not used. Besides it was only ever accessable from a private function. --- tests/test_apis.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 6 deletions(-) (limited to 'tests') diff --git a/tests/test_apis.py b/tests/test_apis.py index a627c79..2875c85 100644 --- a/tests/test_apis.py +++ b/tests/test_apis.py @@ -18,6 +18,7 @@ from logging import DEBUG, WARNING, CRITICAL import yaml import tempfile from io import BytesIO +from xml.etree.ElementTree import ProcessingInstruction PY3 = sys.version_info[0] == 3 @@ -465,23 +466,47 @@ class testSerializers(unittest.TestCase): def testHtml(self): """ Test HTML serialization. """ el = markdown.util.etree.Element('div') + el.set('id', 'foo<&">') p = markdown.util.etree.SubElement(el, 'p') - p.text = 'foo' + p.text = 'foo <&escaped>' + p.set('hidden', 'hidden') markdown.util.etree.SubElement(el, 'hr') + non_element = markdown.util.etree.SubElement(el, None) + non_element.text = 'non-element text' + script = markdown.util.etree.SubElement(non_element, 'script') + script.text = '<&"test\nescaping">' + el.tail = "tail text" self.assertEqual( markdown.serializers.to_html_string(el), - '

foo


' + '
' + '' + '
' + 'non-element text' + '' + '
tail text' ) def testXhtml(self): """" Test XHTML serialization. """ el = markdown.util.etree.Element('div') + el.set('id', 'foo<&">') p = markdown.util.etree.SubElement(el, 'p') - p.text = 'foo' + p.text = 'foo<&escaped>' + p.set('hidden', 'hidden') markdown.util.etree.SubElement(el, 'hr') + non_element = markdown.util.etree.SubElement(el, None) + non_element.text = 'non-element text' + script = markdown.util.etree.SubElement(non_element, 'script') + script.text = '<&"test\nescaping">' + el.tail = "tail text" self.assertEqual( markdown.serializers.to_xhtml_string(el), - '

foo


' + '
' + '' + '
' + 'non-element text' + '' + '
tail text' ) def testMixedCaseTags(self): @@ -496,8 +521,17 @@ class testSerializers(unittest.TestCase): 'not valid html
' ) - def testQName(self): - """ Test serialization of QName. """ + def testProsessingInstruction(self): + """ Test serialization of ProcessignInstruction. """ + pi = ProcessingInstruction('foo', text='<&"test\nescaping">') + self.assertIs(pi.tag, ProcessingInstruction) + self.assertEqual( + markdown.serializers.to_xhtml_string(pi), + '' + ) + + def testQNameTag(self): + """ Test serialization of QName tag. """ div = markdown.util.etree.Element('div') qname = markdown.util.etree.QName('http://www.w3.org/1998/Math/MathML', 'math') math = markdown.util.etree.SubElement(div, qname) @@ -525,6 +559,30 @@ class testSerializers(unittest.TestCase): '' ) + def testQNameAttribute(self): + """ Test serialization of QName attribute. """ + div = markdown.util.etree.Element('div') + div.set(markdown.util.etree.QName('foo'), markdown.util.etree.QName('bar')) + self.assertEqual( + markdown.serializers.to_xhtml_string(div), + '
' + ) + + def testBadQNameTag(self): + """ Test serialization of QName with no tag. """ + qname = markdown.util.etree.QName('http://www.w3.org/1998/Math/MathML') + el = markdown.util.etree.Element(qname) + self.assertRaises(ValueError, markdown.serializers.to_xhtml_string, el) + + def testQNameEscaping(self): + """ Test QName escaping. """ + qname = markdown.util.etree.QName('<&"test\nescaping">', 'div') + el = markdown.util.etree.Element(qname) + self.assertEqual( + markdown.serializers.to_xhtml_string(el), + '
' + ) + def buildExtension(self): """ Build an extension which registers fakeSerializer. """ def fakeSerializer(elem): -- cgit v1.2.3