Skip to content

Commit 9235ea4

Browse files
author
Fredrik Lundh
committed
added cElementTree tests
1 parent 6f0d479 commit 9235ea4

File tree

2 files changed

+204
-0
lines changed

2 files changed

+204
-0
lines changed

Lib/test/test_xml_etree_c.py

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
# xmlcore.etree test for cElementTree
2+
3+
import doctest, sys
4+
5+
from test import test_support
6+
7+
SAMPLE_XML = """
8+
<body>
9+
<tag>text</tag>
10+
<tag />
11+
<section>
12+
<tag>subtext</tag>
13+
</section>
14+
</body>
15+
"""
16+
17+
SAMPLE_XML_NS = """
18+
<body xmlns="http://effbot.org/ns">
19+
<tag>text</tag>
20+
<tag />
21+
<section>
22+
<tag>subtext</tag>
23+
</section>
24+
</body>
25+
"""
26+
27+
def sanity():
28+
"""
29+
Import sanity.
30+
31+
>>> from xmlcore.etree import cElementTree
32+
"""
33+
34+
def check_method(method):
35+
if not callable(method):
36+
print method, "not callable"
37+
38+
def serialize(ET, elem, encoding=None):
39+
import StringIO
40+
file = StringIO.StringIO()
41+
tree = ET.ElementTree(elem)
42+
if encoding:
43+
tree.write(file, encoding)
44+
else:
45+
tree.write(file)
46+
return file.getvalue()
47+
48+
def summarize(elem):
49+
return elem.tag
50+
51+
def summarize_list(seq):
52+
return map(summarize, seq)
53+
54+
def interface():
55+
"""
56+
Test element tree interface.
57+
58+
>>> from xmlcore.etree import cElementTree as ET
59+
60+
>>> element = ET.Element("tag", key="value")
61+
>>> tree = ET.ElementTree(element)
62+
63+
Make sure all standard element methods exist.
64+
65+
>>> check_method(element.append)
66+
>>> check_method(element.insert)
67+
>>> check_method(element.remove)
68+
>>> check_method(element.getchildren)
69+
>>> check_method(element.find)
70+
>>> check_method(element.findall)
71+
>>> check_method(element.findtext)
72+
>>> check_method(element.clear)
73+
>>> check_method(element.get)
74+
>>> check_method(element.set)
75+
>>> check_method(element.keys)
76+
>>> check_method(element.items)
77+
>>> check_method(element.getiterator)
78+
79+
Basic method sanity checks.
80+
81+
>>> serialize(ET, element) # 1
82+
'<tag key="value" />'
83+
>>> subelement = ET.Element("subtag")
84+
>>> element.append(subelement)
85+
>>> serialize(ET, element) # 2
86+
'<tag key="value"><subtag /></tag>'
87+
>>> element.insert(0, subelement)
88+
>>> serialize(ET, element) # 3
89+
'<tag key="value"><subtag /><subtag /></tag>'
90+
>>> element.remove(subelement)
91+
>>> serialize(ET, element) # 4
92+
'<tag key="value"><subtag /></tag>'
93+
>>> element.remove(subelement)
94+
>>> serialize(ET, element) # 5
95+
'<tag key="value" />'
96+
>>> element.remove(subelement)
97+
Traceback (most recent call last):
98+
ValueError: list.remove(x): x not in list
99+
>>> serialize(ET, element) # 6
100+
'<tag key="value" />'
101+
"""
102+
103+
def find():
104+
"""
105+
Test find methods (including xpath syntax).
106+
107+
>>> from xmlcore.etree import cElementTree as ET
108+
109+
>>> elem = ET.XML(SAMPLE_XML)
110+
>>> elem.find("tag").tag
111+
'tag'
112+
>>> ET.ElementTree(elem).find("tag").tag
113+
'tag'
114+
>>> elem.find("section/tag").tag
115+
'tag'
116+
>>> ET.ElementTree(elem).find("section/tag").tag
117+
'tag'
118+
>>> elem.findtext("tag")
119+
'text'
120+
>>> elem.findtext("tog")
121+
>>> elem.findtext("tog", "default")
122+
'default'
123+
>>> ET.ElementTree(elem).findtext("tag")
124+
'text'
125+
>>> elem.findtext("section/tag")
126+
'subtext'
127+
>>> ET.ElementTree(elem).findtext("section/tag")
128+
'subtext'
129+
>>> summarize_list(elem.findall("tag"))
130+
['tag', 'tag']
131+
>>> summarize_list(elem.findall("*"))
132+
['tag', 'tag', 'section']
133+
>>> summarize_list(elem.findall(".//tag"))
134+
['tag', 'tag', 'tag']
135+
>>> summarize_list(elem.findall("section/tag"))
136+
['tag']
137+
>>> summarize_list(elem.findall("section//tag"))
138+
['tag']
139+
>>> summarize_list(elem.findall("section/*"))
140+
['tag']
141+
>>> summarize_list(elem.findall("section//*"))
142+
['tag']
143+
>>> summarize_list(elem.findall("section/.//*"))
144+
['tag']
145+
>>> summarize_list(elem.findall("*/*"))
146+
['tag']
147+
>>> summarize_list(elem.findall("*//*"))
148+
['tag']
149+
>>> summarize_list(elem.findall("*/tag"))
150+
['tag']
151+
>>> summarize_list(elem.findall("*/./tag"))
152+
['tag']
153+
>>> summarize_list(elem.findall("./tag"))
154+
['tag', 'tag']
155+
>>> summarize_list(elem.findall(".//tag"))
156+
['tag', 'tag', 'tag']
157+
>>> summarize_list(elem.findall("././tag"))
158+
['tag', 'tag']
159+
>>> summarize_list(ET.ElementTree(elem).findall("/tag"))
160+
['tag', 'tag']
161+
>>> summarize_list(ET.ElementTree(elem).findall("./tag"))
162+
['tag', 'tag']
163+
>>> elem = ET.XML(SAMPLE_XML_NS)
164+
>>> summarize_list(elem.findall("tag"))
165+
[]
166+
>>> summarize_list(elem.findall("{http://effbot.org/ns}tag"))
167+
['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
168+
>>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag"))
169+
['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
170+
"""
171+
172+
def parseliteral():
173+
r"""
174+
175+
>>> from xmlcore.etree import cElementTree as ET
176+
177+
>>> element = ET.XML("<html><body>text</body></html>")
178+
>>> ET.ElementTree(element).write(sys.stdout)
179+
<html><body>text</body></html>
180+
>>> element = ET.fromstring("<html><body>text</body></html>")
181+
>>> ET.ElementTree(element).write(sys.stdout)
182+
<html><body>text</body></html>
183+
>>> print ET.tostring(element)
184+
<html><body>text</body></html>
185+
>>> print ET.tostring(element, "ascii")
186+
<?xml version='1.0' encoding='ascii'?>
187+
<html><body>text</body></html>
188+
>>> _, ids = ET.XMLID("<html><body>text</body></html>")
189+
>>> len(ids)
190+
0
191+
>>> _, ids = ET.XMLID("<html><body id='body'>text</body></html>")
192+
>>> len(ids)
193+
1
194+
>>> ids["body"].tag
195+
'body'
196+
"""
197+
198+
def test_main():
199+
from test import test_xml_etree_c
200+
test_support.run_doctest(test_xml_etree_c, verbosity=True)
201+
202+
if __name__ == '__main__':
203+
test_main()

Lib/test/xmltests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ def runtest(name):
1616
runtest("test.test_pyexpat")
1717
runtest("test.test_sax")
1818
runtest("test.test_xml_etree")
19+
runtest("test.test_xml_etree_c")
1920
runtest("test.test_xmllib")
2021
runtest("test.test_xmlrpc")

0 commit comments

Comments
 (0)