#1153769: document PEP 237 changes to string formatting.
[python.git] / Lib / test / test_xml_etree_c.py
blob7ddd44bf81e7f7436e691f0f53fcdd4ef35c53ea
1 # xml.etree test for cElementTree
3 import doctest
4 import sys
6 from test import test_support
8 from xml.etree import cElementTree as ET
10 SAMPLE_XML = """
11 <body>
12 <tag>text</tag>
13 <tag />
14 <section>
15 <tag>subtext</tag>
16 </section>
17 </body>
18 """
20 SAMPLE_XML_NS = """
21 <body xmlns="http://effbot.org/ns">
22 <tag>text</tag>
23 <tag />
24 <section>
25 <tag>subtext</tag>
26 </section>
27 </body>
28 """
30 def sanity():
31 """
32 Import sanity.
34 >>> from xml.etree import cElementTree
35 """
37 def check_method(method):
38 if not callable(method):
39 print method, "not callable"
41 def serialize(ET, elem, encoding=None):
42 import StringIO
43 file = StringIO.StringIO()
44 tree = ET.ElementTree(elem)
45 if encoding:
46 tree.write(file, encoding)
47 else:
48 tree.write(file)
49 return file.getvalue()
51 def summarize(elem):
52 return elem.tag
54 def summarize_list(seq):
55 return map(summarize, seq)
57 def interface():
58 """
59 Test element tree interface.
61 >>> element = ET.Element("tag", key="value")
62 >>> tree = ET.ElementTree(element)
64 Make sure all standard element methods exist.
66 >>> check_method(element.append)
67 >>> check_method(element.insert)
68 >>> check_method(element.remove)
69 >>> check_method(element.getchildren)
70 >>> check_method(element.find)
71 >>> check_method(element.findall)
72 >>> check_method(element.findtext)
73 >>> check_method(element.clear)
74 >>> check_method(element.get)
75 >>> check_method(element.set)
76 >>> check_method(element.keys)
77 >>> check_method(element.items)
78 >>> check_method(element.getiterator)
80 Basic method sanity checks.
82 >>> serialize(ET, element) # 1
83 '<tag key="value" />'
84 >>> subelement = ET.Element("subtag")
85 >>> element.append(subelement)
86 >>> serialize(ET, element) # 2
87 '<tag key="value"><subtag /></tag>'
88 >>> element.insert(0, subelement)
89 >>> serialize(ET, element) # 3
90 '<tag key="value"><subtag /><subtag /></tag>'
91 >>> element.remove(subelement)
92 >>> serialize(ET, element) # 4
93 '<tag key="value"><subtag /></tag>'
94 >>> element.remove(subelement)
95 >>> serialize(ET, element) # 5
96 '<tag key="value" />'
97 >>> element.remove(subelement)
98 Traceback (most recent call last):
99 ValueError: list.remove(x): x not in list
100 >>> serialize(ET, element) # 6
101 '<tag key="value" />'
104 def find():
106 Test find methods (including xpath syntax).
108 >>> elem = ET.XML(SAMPLE_XML)
109 >>> elem.find("tag").tag
110 'tag'
111 >>> ET.ElementTree(elem).find("tag").tag
112 'tag'
113 >>> elem.find("section/tag").tag
114 'tag'
115 >>> ET.ElementTree(elem).find("section/tag").tag
116 'tag'
117 >>> elem.findtext("tag")
118 'text'
119 >>> elem.findtext("tog")
120 >>> elem.findtext("tog", "default")
121 'default'
122 >>> ET.ElementTree(elem).findtext("tag")
123 'text'
124 >>> elem.findtext("section/tag")
125 'subtext'
126 >>> ET.ElementTree(elem).findtext("section/tag")
127 'subtext'
128 >>> summarize_list(elem.findall("tag"))
129 ['tag', 'tag']
130 >>> summarize_list(elem.findall("*"))
131 ['tag', 'tag', 'section']
132 >>> summarize_list(elem.findall(".//tag"))
133 ['tag', 'tag', 'tag']
134 >>> summarize_list(elem.findall("section/tag"))
135 ['tag']
136 >>> summarize_list(elem.findall("section//tag"))
137 ['tag']
138 >>> summarize_list(elem.findall("section/*"))
139 ['tag']
140 >>> summarize_list(elem.findall("section//*"))
141 ['tag']
142 >>> summarize_list(elem.findall("section/.//*"))
143 ['tag']
144 >>> summarize_list(elem.findall("*/*"))
145 ['tag']
146 >>> summarize_list(elem.findall("*//*"))
147 ['tag']
148 >>> summarize_list(elem.findall("*/tag"))
149 ['tag']
150 >>> summarize_list(elem.findall("*/./tag"))
151 ['tag']
152 >>> summarize_list(elem.findall("./tag"))
153 ['tag', 'tag']
154 >>> summarize_list(elem.findall(".//tag"))
155 ['tag', 'tag', 'tag']
156 >>> summarize_list(elem.findall("././tag"))
157 ['tag', 'tag']
158 >>> summarize_list(ET.ElementTree(elem).findall("/tag"))
159 ['tag', 'tag']
160 >>> summarize_list(ET.ElementTree(elem).findall("./tag"))
161 ['tag', 'tag']
162 >>> elem = ET.XML(SAMPLE_XML_NS)
163 >>> summarize_list(elem.findall("tag"))
165 >>> summarize_list(elem.findall("{http://effbot.org/ns}tag"))
166 ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
167 >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag"))
168 ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
171 def parseliteral():
172 r"""
174 >>> element = ET.XML("<html><body>text</body></html>")
175 >>> ET.ElementTree(element).write(sys.stdout)
176 <html><body>text</body></html>
177 >>> element = ET.fromstring("<html><body>text</body></html>")
178 >>> ET.ElementTree(element).write(sys.stdout)
179 <html><body>text</body></html>
180 >>> print ET.tostring(element)
181 <html><body>text</body></html>
182 >>> print ET.tostring(element, "ascii")
183 <?xml version='1.0' encoding='ascii'?>
184 <html><body>text</body></html>
185 >>> _, ids = ET.XMLID("<html><body>text</body></html>")
186 >>> len(ids)
188 >>> _, ids = ET.XMLID("<html><body id='body'>text</body></html>")
189 >>> len(ids)
191 >>> ids["body"].tag
192 'body'
195 def check_encoding(encoding):
197 >>> check_encoding("ascii")
198 >>> check_encoding("us-ascii")
199 >>> check_encoding("iso-8859-1")
200 >>> check_encoding("iso-8859-15")
201 >>> check_encoding("cp437")
202 >>> check_encoding("mac-roman")
204 ET.XML(
205 "<?xml version='1.0' encoding='%s'?><xml />" % encoding
208 def bug_1534630():
210 >>> bob = ET.TreeBuilder()
211 >>> e = bob.data("data")
212 >>> e = bob.start("tag", {})
213 >>> e = bob.end("tag")
214 >>> e = bob.close()
215 >>> serialize(ET, e)
216 '<tag />'
219 def test_main():
220 from test import test_xml_etree_c
221 test_support.run_doctest(test_xml_etree_c, verbosity=True)
223 if __name__ == '__main__':
224 test_main()