Files
RustPython/extra_tests/snippets/stdlib_xml.py
youknowdot 1fa883b9b5 Match Element.remove argument type diagnostics (#9068)
Match native type names, None spelling, and UTF-8 byte limits while preserving removal behavior. Keep all six regression cases in the existing XML snippet.

Assisted-by: OpenAI Codex:model identifier unavailable
2026-10-11 23:47:18 +09:00

86 lines
2.4 KiB
Python

import array
import xml.sax
from xml.etree.ElementTree import Element
from xml.parsers import expat
from testutils import assert_raises
assert expat.XML_PARAM_ENTITY_PARSING_NEVER == 0
assert expat.XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE == 1
assert expat.XML_PARAM_ENTITY_PARSING_ALWAYS == 2
parser = expat.ParserCreate()
for value in (0, 1, 2, 3, -1, True):
assert parser.SetParamEntityParsing(value) == 1
for value in ("x", None):
with assert_raises(TypeError):
parser.SetParamEntityParsing(value)
with assert_raises(OverflowError):
parser.SetParamEntityParsing(2**100)
assert parser.GetBase() is None
assert parser.SetBase("example.xml") is None
assert parser.GetBase() == "example.xml"
for value in (b"example.xml", None, 123):
with assert_raises(TypeError):
parser.SetBase(value)
class Handler(xml.sax.handler.ContentHandler):
def __init__(self):
self.events = []
def startElement(self, name, attrs):
self.events.append(("start", name))
def endElement(self, name):
self.events.append(("end", name))
handler = Handler()
xml.sax.parseString("<main><child /></main>", handler)
assert handler.events == [
("start", "main"),
("start", "child"),
("end", "child"),
("end", "main"),
]
events = []
parser = expat.ParserCreate()
parser.ProcessingInstructionHandler = lambda target, data: events.append(
("processing-instruction", target, data)
)
parser.CommentHandler = lambda data: events.append(("comment", data))
parser.StartCdataSectionHandler = lambda: events.append(("start-cdata",))
parser.CharacterDataHandler = lambda data: events.append(("characters", data))
parser.EndCdataSectionHandler = lambda: events.append(("end-cdata",))
parser.Parse(
"<?target data?><?empty?><root><!--comment--><![CDATA[text]]></root>", True
)
assert events == [
("processing-instruction", "target", "data"),
("processing-instruction", "empty", ""),
("comment", "comment"),
("start-cdata",),
("characters", "text"),
("end-cdata",),
]
root = Element("root")
for value, type_name in (
(None, "None"),
(1, "int"),
("child", "str"),
(array.array("b"), "array.array"),
(type("A" * 60, (), {})(), "A" * 50),
(type("€" * 20, (), {})(), "€" * 16),
):
with assert_raises(TypeError) as caught:
root.remove(value)
assert str(caught.exception) == (
"remove() argument must be xml.etree.ElementTree.Element, not " + type_name
)