def test_dtd_file(self): parse = etree.parse tree = parse(fileInTestDir("test.xml")) root = tree.getroot() dtd = etree.DTD(fileInTestDir("test.dtd")) self.assertTrue(dtd.validate(root))
def test_dtd_attrs(self): dtd = etree.DTD(fileUrlInTestDir("test.dtd")) # Test DTD.system_url attribute self.assertTrue(dtd.system_url.endswith("test.dtd")) # Test elements and their attributes a = dtd.elements()[0] self.assertEqual(a.name, "a") self.assertEqual(a.type, "element") self.assertEqual(a.content.name, "b") self.assertEqual(a.content.type, "element") self.assertEqual(a.content.occur, "once") aattr = a.attributes()[0] self.assertEqual(aattr.name, "default") self.assertEqual(aattr.type, "enumeration") self.assertEqual(aattr.values(), ["valueA", "valueB"]) self.assertEqual(aattr.default_value, "valueA") b = dtd.elements()[1] self.assertEqual(b.name, "b") self.assertEqual(b.type, "empty") self.assertEqual(b.content, None) # Test entities and their attributes c = dtd.entities()[0] self.assertEqual(c.name, "c") self.assertEqual(c.orig, "*") self.assertEqual(c.content, "*") # Test DTD.name attribute root = etree.XML( _bytes(''' <!DOCTYPE a SYSTEM "none" [ <!ELEMENT a EMPTY> ]> <a/> ''')) dtd = etree.ElementTree(root).docinfo.internalDTD self.assertEqual(dtd.name, "a") # Test DTD.name and DTD.systemID attributes parser = etree.XMLParser(dtd_validation=True) xml = '<!DOCTYPE a SYSTEM "test.dtd"><a><b/></a>' root = etree.fromstring(xml, parser=parser, base_url=fileUrlInTestDir("test.xml")) dtd = root.getroottree().docinfo.internalDTD self.assertEqual(dtd.name, "a") self.assertEqual(dtd.system_url, "test.dtd")
def test_dtd_invalid_duplicate_id(self): root = etree.XML(_bytes(''' <a><b id="id1"/><b id="id2"/><b id="id1"/></a> ''')) dtd = etree.DTD(BytesIO(_bytes(""" <!ELEMENT a (b*)> <!ATTLIST b id ID #REQUIRED > <!ELEMENT b EMPTY> """))) self.assertFalse(dtd.validate(root)) self.assertTrue(dtd.error_log) self.assertTrue([error for error in dtd.error_log if 'id1' in error.message])
def test_dtd_assertValid(self): root = etree.XML("<b><a/></b>") dtd = etree.DTD(BytesIO("<!ELEMENT b (a)><!ELEMENT a EMPTY>")) dtd.assertValid(root)
def test_dtd_invalid(self): root = etree.XML("<b><a/></b>") dtd = etree.DTD(BytesIO("<!ELEMENT b EMPTY>")) self.assertRaises(etree.DocumentInvalid, dtd.assertValid, root)
def test_dtd_stringio(self): root = etree.XML(_bytes("<b/>")) dtd = etree.DTD(BytesIO("<!ELEMENT b EMPTY>")) self.assertTrue(dtd.validate(root))