Пример #1
0
    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))
Пример #2
0
    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")
Пример #3
0
 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])
Пример #4
0
 def test_dtd_assertValid(self):
     root = etree.XML("<b><a/></b>")
     dtd = etree.DTD(BytesIO("<!ELEMENT b (a)><!ELEMENT a EMPTY>"))
     dtd.assertValid(root)
Пример #5
0
 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)
Пример #6
0
 def test_dtd_stringio(self):
     root = etree.XML(_bytes("<b/>"))
     dtd = etree.DTD(BytesIO("<!ELEMENT b EMPTY>"))
     self.assertTrue(dtd.validate(root))