def test_set_decl_system(self): doc = etree.Element('test').getroottree() doc.docinfo.system_url = 'baz' self.assertEqual(doc.docinfo.doctype, '<!DOCTYPE test SYSTEM "baz">') self.assertEqual(etree.tostring(doc), _bytes('<!DOCTYPE test SYSTEM "baz">\n<test/>'))
def test_set_decl_public(self): doc = etree.Element('test').getroottree() doc.docinfo.public_id = 'bar' doc.docinfo.system_url = 'baz' self.assertEqual(doc.docinfo.doctype, '<!DOCTYPE test PUBLIC "bar" "baz">') self.assertEqual(etree.tostring(doc), _bytes('<!DOCTYPE test PUBLIC "bar" "baz">\n<test/>'))
def test_ietf_decl(self): html_data = ('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\n' '<html></html>') root = etree.HTML(html_data) doc = root.getroottree() self.assertEqual(doc.docinfo.doctype, '<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">') self.assertEqual(etree.tostring(doc, method='html'), _bytes(html_data))
def test_empty_decl(self): doc = etree.Element('test').getroottree() doc.docinfo.public_id = None self.assertEqual(doc.docinfo.doctype, '<!DOCTYPE test>') self.assertTrue(doc.docinfo.public_id is None) self.assertTrue(doc.docinfo.system_url is None) self.assertEqual(etree.tostring(doc), _bytes('<!DOCTYPE test>\n<test/>'))
def test_ietf_decl(self): html_data = ( '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\n' '<html></html>') root = etree.HTML(html_data) doc = root.getroottree() self.assertEqual(doc.docinfo.doctype, '<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">') self.assertEqual(etree.tostring(doc, method='html'), _bytes(html_data))
def test_html_decl(self): # Slightly different to one above: when we create an html element, # we do not start with a blank slate. doc = html.Element('html').getroottree() doc.docinfo.public_id = 'bar' doc.docinfo.system_url = 'baz' self.assertEqual(doc.docinfo.doctype, '<!DOCTYPE html PUBLIC "bar" "baz">') self.assertEqual(etree.tostring(doc), _bytes('<!DOCTYPE html PUBLIC "bar" "baz">\n<html/>'))
def test_declaration_escape_quote_pid(self): # Standard allows quotes in systemliteral, but in that case # systemliteral must be escaped with single quotes. # See http://www.w3.org/TR/REC-xml/#sec-prolog-dtd. root = etree.XML('''<!DOCTYPE a PUBLIC 'foo' '"'><a/>''') doc = root.getroottree() self.assertEqual(doc.docinfo.doctype, '''<!DOCTYPE a PUBLIC "foo" '"'>''') self.assertEqual(etree.tostring(doc), _bytes('''<!DOCTYPE a PUBLIC "foo" '"'>\n<a/>'''))
def testrun(): for _ in range(3): root = self.etree.Element('thread_root') for name in names: tag_name = name * 5 new = [] for _ in runs_per_name: el = SubElement(root, tag_name, {'thread_attr_' + name: 'value'}) new.append(el) for el in new: el.set('thread_attr2_' + name, 'value2') s = etree.tostring(root) self.assertTrue(result_matches(s))
def test_xslt_multiple_transforms(self): xml = '<a/>' xslt = '''\ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <response>Some text</response> </xsl:template> </xsl:stylesheet> ''' source = self.parse(xml) styledoc = self.parse(xslt) style = etree.XSLT(styledoc) result = style(source) etree.tostring(result.getroot()) source = self.parse(xml) styledoc = self.parse(xslt) style = etree.XSLT(styledoc) result = style(source) etree.tostring(result.getroot())
def test_xslt_repeat_transform(self): xml = '<a/>' xslt = '''\ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <response>Some text</response> </xsl:template> </xsl:stylesheet> ''' source = self.parse(xml) styledoc = self.parse(xslt) transform = etree.XSLT(styledoc) result = transform(source) result = transform(source) etree.tostring(result.getroot()) result = transform(source) etree.tostring(result.getroot()) str(result) result1 = transform(source) result2 = transform(source) self.assertEquals(str(result1), str(result2)) result = transform(source) str(result)
def test_xslt_shortcut(self): tree = self.parse('<a><b>B</b><c>C</c></a>') style = self.parse('''\ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="*" /> <xsl:template match="/"> <doc> <foo><xsl:value-of select="$bar" /></foo> <foo><xsl:value-of select="$baz" /></foo> </doc> </xsl:template> </xsl:stylesheet>''') result = tree.xslt(style, bar="'Bar'", baz="'Baz'") self.assertEquals( _bytes('<doc><foo>Bar</foo><foo>Baz</foo></doc>'), etree.tostring(result.getroot()))
def test_declaration_apos(self): root = etree.XML('''<!DOCTYPE a SYSTEM "'"><a/>''') doc = root.getroottree() self.assertEqual(doc.docinfo.doctype, '''<!DOCTYPE a SYSTEM "'">''') self.assertEqual(etree.tostring(doc), _bytes('''<!DOCTYPE a SYSTEM "'">\n<a/>'''))
def test_declaration_quote_withoutpid(self): root = etree.XML('''<!DOCTYPE a SYSTEM '"'><a/>''') doc = root.getroottree() self.assertEqual(doc.docinfo.doctype, '''<!DOCTYPE a SYSTEM '"'>''') self.assertEqual(etree.tostring(doc), _bytes('''<!DOCTYPE a SYSTEM '"'>\n<a/>'''))
def test_comment_before_dtd(self): data = '<!--comment--><!DOCTYPE test>\n<!-- --><test/>' doc = etree.fromstring(data).getroottree() self.assertEqual(etree.tostring(doc), _bytes(data))
def _assert_unicode(self, uxml): root = etree.XML(uxml) self.assertEqual(uni, root.text) self.assertEqual(etree.tostring(root), "<p>Ãڀㄠ</p>")
def handle(self, element): return etree.tostring(element)