mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r78838 | florent.xicluna | 2010-03-11 15:36:19 +0100 (jeu, 11 mar 2010) | 2 lines Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. ........ r78839 | florent.xicluna | 2010-03-11 16:55:11 +0100 (jeu, 11 mar 2010) | 2 lines Fix repr of tree Element on windows. ........ r78917 | florent.xicluna | 2010-03-13 12:18:49 +0100 (sam, 13 mar 2010) | 2 lines Move the xml test data to their own directory. ........ r78919 | florent.xicluna | 2010-03-13 13:41:48 +0100 (sam, 13 mar 2010) | 2 lines Do not chdir when running test_xml_etree, and enhance the findfile helper. ........ r78934 | florent.xicluna | 2010-03-13 18:56:19 +0100 (sam, 13 mar 2010) | 2 lines Update some parts of the xml.etree documentation. ........ r78937 | florent.xicluna | 2010-03-13 21:30:15 +0100 (sam, 13 mar 2010) | 3 lines Add the keyword argument "method=None" to the .write() method and the tostring/tostringlist functions. Update the function, class and method signatures, according to the new convention. ........
This commit is contained in:
parent
9451a1c6ae
commit
f15351d938
19 changed files with 3534 additions and 1327 deletions
|
@ -1,31 +1,11 @@
|
|||
# xml.etree test for cElementTree
|
||||
|
||||
import doctest
|
||||
import sys
|
||||
|
||||
from test import support
|
||||
|
||||
ET = support.import_module('xml.etree.cElementTree')
|
||||
cET = support.import_module('xml.etree.cElementTree')
|
||||
|
||||
SAMPLE_XML = """
|
||||
<body>
|
||||
<tag>text</tag>
|
||||
<tag />
|
||||
<section>
|
||||
<tag>subtext</tag>
|
||||
</section>
|
||||
</body>
|
||||
"""
|
||||
|
||||
SAMPLE_XML_NS = """
|
||||
<body xmlns="http://effbot.org/ns">
|
||||
<tag>text</tag>
|
||||
<tag />
|
||||
<section>
|
||||
<tag>subtext</tag>
|
||||
</section>
|
||||
</body>
|
||||
"""
|
||||
# cElementTree specific tests
|
||||
|
||||
def sanity():
|
||||
"""
|
||||
|
@ -34,187 +14,26 @@ def sanity():
|
|||
>>> from xml.etree import cElementTree
|
||||
"""
|
||||
|
||||
def check_method(method):
|
||||
if not hasattr(method, '__call__'):
|
||||
print(method, "not callable")
|
||||
|
||||
def serialize(ET, elem):
|
||||
import io
|
||||
file = io.StringIO()
|
||||
tree = ET.ElementTree(elem)
|
||||
tree.write(file)
|
||||
return file.getvalue()
|
||||
|
||||
def summarize(elem):
|
||||
return elem.tag
|
||||
|
||||
def summarize_list(seq):
|
||||
return list(map(summarize, seq))
|
||||
|
||||
def interface():
|
||||
"""
|
||||
Test element tree interface.
|
||||
|
||||
>>> element = ET.Element("tag", key="value")
|
||||
>>> tree = ET.ElementTree(element)
|
||||
|
||||
Make sure all standard element methods exist.
|
||||
|
||||
>>> check_method(element.append)
|
||||
>>> check_method(element.insert)
|
||||
>>> check_method(element.remove)
|
||||
>>> check_method(element.getchildren)
|
||||
>>> check_method(element.find)
|
||||
>>> check_method(element.findall)
|
||||
>>> check_method(element.findtext)
|
||||
>>> check_method(element.clear)
|
||||
>>> check_method(element.get)
|
||||
>>> check_method(element.set)
|
||||
>>> check_method(element.keys)
|
||||
>>> check_method(element.items)
|
||||
>>> check_method(element.getiterator)
|
||||
|
||||
Basic method sanity checks.
|
||||
|
||||
>>> serialize(ET, element) # 1
|
||||
'<tag key="value" />'
|
||||
>>> subelement = ET.Element("subtag")
|
||||
>>> element.append(subelement)
|
||||
>>> serialize(ET, element) # 2
|
||||
'<tag key="value"><subtag /></tag>'
|
||||
>>> element.insert(0, subelement)
|
||||
>>> serialize(ET, element) # 3
|
||||
'<tag key="value"><subtag /><subtag /></tag>'
|
||||
>>> element.remove(subelement)
|
||||
>>> serialize(ET, element) # 4
|
||||
'<tag key="value"><subtag /></tag>'
|
||||
>>> element.remove(subelement)
|
||||
>>> serialize(ET, element) # 5
|
||||
'<tag key="value" />'
|
||||
>>> element.remove(subelement)
|
||||
Traceback (most recent call last):
|
||||
ValueError: list.remove(x): x not in list
|
||||
>>> serialize(ET, element) # 6
|
||||
'<tag key="value" />'
|
||||
"""
|
||||
|
||||
def find():
|
||||
"""
|
||||
Test find methods (including xpath syntax).
|
||||
|
||||
>>> elem = ET.XML(SAMPLE_XML)
|
||||
>>> elem.find("tag").tag
|
||||
'tag'
|
||||
>>> ET.ElementTree(elem).find("tag").tag
|
||||
'tag'
|
||||
>>> elem.find("section/tag").tag
|
||||
'tag'
|
||||
>>> ET.ElementTree(elem).find("section/tag").tag
|
||||
'tag'
|
||||
>>> elem.findtext("tag")
|
||||
'text'
|
||||
>>> elem.findtext("tog")
|
||||
>>> elem.findtext("tog", "default")
|
||||
'default'
|
||||
>>> ET.ElementTree(elem).findtext("tag")
|
||||
'text'
|
||||
>>> elem.findtext("section/tag")
|
||||
'subtext'
|
||||
>>> ET.ElementTree(elem).findtext("section/tag")
|
||||
'subtext'
|
||||
>>> summarize_list(elem.findall("tag"))
|
||||
['tag', 'tag']
|
||||
>>> summarize_list(elem.findall("*"))
|
||||
['tag', 'tag', 'section']
|
||||
>>> summarize_list(elem.findall(".//tag"))
|
||||
['tag', 'tag', 'tag']
|
||||
>>> summarize_list(elem.findall("section/tag"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("section//tag"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("section/*"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("section//*"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("section/.//*"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("*/*"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("*//*"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("*/tag"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("*/./tag"))
|
||||
['tag']
|
||||
>>> summarize_list(elem.findall("./tag"))
|
||||
['tag', 'tag']
|
||||
>>> summarize_list(elem.findall(".//tag"))
|
||||
['tag', 'tag', 'tag']
|
||||
>>> summarize_list(elem.findall("././tag"))
|
||||
['tag', 'tag']
|
||||
>>> summarize_list(ET.ElementTree(elem).findall("/tag"))
|
||||
['tag', 'tag']
|
||||
>>> summarize_list(ET.ElementTree(elem).findall("./tag"))
|
||||
['tag', 'tag']
|
||||
>>> elem = ET.XML(SAMPLE_XML_NS)
|
||||
>>> summarize_list(elem.findall("tag"))
|
||||
[]
|
||||
>>> summarize_list(elem.findall("{http://effbot.org/ns}tag"))
|
||||
['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
|
||||
>>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag"))
|
||||
['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
|
||||
"""
|
||||
|
||||
def parseliteral():
|
||||
r"""
|
||||
|
||||
>>> element = ET.XML("<html><body>text</body></html>")
|
||||
>>> ET.ElementTree(element).write(sys.stdout)
|
||||
<html><body>text</body></html>
|
||||
>>> element = ET.fromstring("<html><body>text</body></html>")
|
||||
>>> ET.ElementTree(element).write(sys.stdout)
|
||||
<html><body>text</body></html>
|
||||
>>> print(ET.tostring(element))
|
||||
<html><body>text</body></html>
|
||||
>>> print(repr(ET.tostring(element, "ascii")))
|
||||
b"<?xml version='1.0' encoding='ascii'?>\n<html><body>text</body></html>"
|
||||
>>> _, ids = ET.XMLID("<html><body>text</body></html>")
|
||||
>>> len(ids)
|
||||
0
|
||||
>>> _, ids = ET.XMLID("<html><body id='body'>text</body></html>")
|
||||
>>> len(ids)
|
||||
1
|
||||
>>> ids["body"].tag
|
||||
'body'
|
||||
"""
|
||||
|
||||
def check_encoding(encoding):
|
||||
"""
|
||||
>>> check_encoding("ascii")
|
||||
>>> check_encoding("us-ascii")
|
||||
>>> check_encoding("iso-8859-1")
|
||||
>>> check_encoding("iso-8859-15")
|
||||
>>> check_encoding("cp437")
|
||||
>>> check_encoding("mac-roman")
|
||||
"""
|
||||
ET.XML(
|
||||
"<?xml version='1.0' encoding='%s'?><xml />" % encoding
|
||||
)
|
||||
|
||||
def bug_1534630():
|
||||
"""
|
||||
>>> bob = ET.TreeBuilder()
|
||||
>>> e = bob.data("data")
|
||||
>>> e = bob.start("tag", {})
|
||||
>>> e = bob.end("tag")
|
||||
>>> e = bob.close()
|
||||
>>> serialize(ET, e)
|
||||
'<tag />'
|
||||
"""
|
||||
|
||||
def test_main():
|
||||
from test import test_xml_etree_c
|
||||
from test import test_xml_etree, test_xml_etree_c
|
||||
|
||||
# Run the tests specific to the C implementation
|
||||
support.run_doctest(test_xml_etree_c, verbosity=True)
|
||||
|
||||
# Assign the C implementation before running the doctests
|
||||
# Patch the __name__, to prevent confusion with the pure Python test
|
||||
pyET = test_xml_etree.ET
|
||||
py__name__ = test_xml_etree.__name__
|
||||
test_xml_etree.ET = cET
|
||||
if __name__ != '__main__':
|
||||
test_xml_etree.__name__ = __name__
|
||||
try:
|
||||
# Run the same test suite as xml.etree.ElementTree
|
||||
test_xml_etree.test_main(module_name='xml.etree.cElementTree')
|
||||
finally:
|
||||
test_xml_etree.ET = pyET
|
||||
test_xml_etree.__name__ = py__name__
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue