~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Lib/test/test_xml_etree_c.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# xml.etree test for cElementTree
 
2
 
 
3
import doctest
 
4
import sys
 
5
 
 
6
from test import support
 
7
 
 
8
from xml.etree import cElementTree as ET
 
9
 
 
10
SAMPLE_XML = """
 
11
<body>
 
12
  <tag>text</tag>
 
13
  <tag />
 
14
  <section>
 
15
    <tag>subtext</tag>
 
16
  </section>
 
17
</body>
 
18
"""
 
19
 
 
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
"""
 
29
 
 
30
def sanity():
 
31
    """
 
32
    Import sanity.
 
33
 
 
34
    >>> from xml.etree import cElementTree
 
35
    """
 
36
 
 
37
def check_method(method):
 
38
    if not hasattr(method, '__call__'):
 
39
        print(method, "not callable")
 
40
 
 
41
def serialize(ET, elem):
 
42
    import io
 
43
    file = io.StringIO()
 
44
    tree = ET.ElementTree(elem)
 
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 list(map(summarize, seq))
 
53
 
 
54
def interface():
 
55
    """
 
56
    Test element tree interface.
 
57
 
 
58
    >>> element = ET.Element("tag", key="value")
 
59
    >>> tree = ET.ElementTree(element)
 
60
 
 
61
    Make sure all standard element methods exist.
 
62
 
 
63
    >>> check_method(element.append)
 
64
    >>> check_method(element.insert)
 
65
    >>> check_method(element.remove)
 
66
    >>> check_method(element.getchildren)
 
67
    >>> check_method(element.find)
 
68
    >>> check_method(element.findall)
 
69
    >>> check_method(element.findtext)
 
70
    >>> check_method(element.clear)
 
71
    >>> check_method(element.get)
 
72
    >>> check_method(element.set)
 
73
    >>> check_method(element.keys)
 
74
    >>> check_method(element.items)
 
75
    >>> check_method(element.getiterator)
 
76
 
 
77
    Basic method sanity checks.
 
78
 
 
79
    >>> serialize(ET, element) # 1
 
80
    '<tag key="value" />'
 
81
    >>> subelement = ET.Element("subtag")
 
82
    >>> element.append(subelement)
 
83
    >>> serialize(ET, element) #  2
 
84
    '<tag key="value"><subtag /></tag>'
 
85
    >>> element.insert(0, subelement)
 
86
    >>> serialize(ET, element) # 3
 
87
    '<tag key="value"><subtag /><subtag /></tag>'
 
88
    >>> element.remove(subelement)
 
89
    >>> serialize(ET, element) # 4
 
90
    '<tag key="value"><subtag /></tag>'
 
91
    >>> element.remove(subelement)
 
92
    >>> serialize(ET, element) # 5
 
93
    '<tag key="value" />'
 
94
    >>> element.remove(subelement)
 
95
    Traceback (most recent call last):
 
96
    ValueError: list.remove(x): x not in list
 
97
    >>> serialize(ET, element) # 6
 
98
    '<tag key="value" />'
 
99
    """
 
100
 
 
101
def find():
 
102
    """
 
103
    Test find methods (including xpath syntax).
 
104
 
 
105
    >>> elem = ET.XML(SAMPLE_XML)
 
106
    >>> elem.find("tag").tag
 
107
    'tag'
 
108
    >>> ET.ElementTree(elem).find("tag").tag
 
109
    'tag'
 
110
    >>> elem.find("section/tag").tag
 
111
    'tag'
 
112
    >>> ET.ElementTree(elem).find("section/tag").tag
 
113
    'tag'
 
114
    >>> elem.findtext("tag")
 
115
    'text'
 
116
    >>> elem.findtext("tog")
 
117
    >>> elem.findtext("tog", "default")
 
118
    'default'
 
119
    >>> ET.ElementTree(elem).findtext("tag")
 
120
    'text'
 
121
    >>> elem.findtext("section/tag")
 
122
    'subtext'
 
123
    >>> ET.ElementTree(elem).findtext("section/tag")
 
124
    'subtext'
 
125
    >>> summarize_list(elem.findall("tag"))
 
126
    ['tag', 'tag']
 
127
    >>> summarize_list(elem.findall("*"))
 
128
    ['tag', 'tag', 'section']
 
129
    >>> summarize_list(elem.findall(".//tag"))
 
130
    ['tag', 'tag', 'tag']
 
131
    >>> summarize_list(elem.findall("section/tag"))
 
132
    ['tag']
 
133
    >>> summarize_list(elem.findall("section//tag"))
 
134
    ['tag']
 
135
    >>> summarize_list(elem.findall("section/*"))
 
136
    ['tag']
 
137
    >>> summarize_list(elem.findall("section//*"))
 
138
    ['tag']
 
139
    >>> summarize_list(elem.findall("section/.//*"))
 
140
    ['tag']
 
141
    >>> summarize_list(elem.findall("*/*"))
 
142
    ['tag']
 
143
    >>> summarize_list(elem.findall("*//*"))
 
144
    ['tag']
 
145
    >>> summarize_list(elem.findall("*/tag"))
 
146
    ['tag']
 
147
    >>> summarize_list(elem.findall("*/./tag"))
 
148
    ['tag']
 
149
    >>> summarize_list(elem.findall("./tag"))
 
150
    ['tag', 'tag']
 
151
    >>> summarize_list(elem.findall(".//tag"))
 
152
    ['tag', 'tag', 'tag']
 
153
    >>> summarize_list(elem.findall("././tag"))
 
154
    ['tag', 'tag']
 
155
    >>> summarize_list(ET.ElementTree(elem).findall("/tag"))
 
156
    ['tag', 'tag']
 
157
    >>> summarize_list(ET.ElementTree(elem).findall("./tag"))
 
158
    ['tag', 'tag']
 
159
    >>> elem = ET.XML(SAMPLE_XML_NS)
 
160
    >>> summarize_list(elem.findall("tag"))
 
161
    []
 
162
    >>> summarize_list(elem.findall("{http://effbot.org/ns}tag"))
 
163
    ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
 
164
    >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag"))
 
165
    ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
 
166
    """
 
167
 
 
168
def parseliteral():
 
169
    r"""
 
170
 
 
171
    >>> element = ET.XML("<html><body>text</body></html>")
 
172
    >>> ET.ElementTree(element).write(sys.stdout)
 
173
    <html><body>text</body></html>
 
174
    >>> element = ET.fromstring("<html><body>text</body></html>")
 
175
    >>> ET.ElementTree(element).write(sys.stdout)
 
176
    <html><body>text</body></html>
 
177
    >>> print(ET.tostring(element))
 
178
    <html><body>text</body></html>
 
179
    >>> print(repr(ET.tostring(element, "ascii")))
 
180
    b"<?xml version='1.0' encoding='ascii'?>\n<html><body>text</body></html>"
 
181
    >>> _, ids = ET.XMLID("<html><body>text</body></html>")
 
182
    >>> len(ids)
 
183
    0
 
184
    >>> _, ids = ET.XMLID("<html><body id='body'>text</body></html>")
 
185
    >>> len(ids)
 
186
    1
 
187
    >>> ids["body"].tag
 
188
    'body'
 
189
    """
 
190
 
 
191
def check_encoding(encoding):
 
192
    """
 
193
    >>> check_encoding("ascii")
 
194
    >>> check_encoding("us-ascii")
 
195
    >>> check_encoding("iso-8859-1")
 
196
    >>> check_encoding("iso-8859-15")
 
197
    >>> check_encoding("cp437")
 
198
    >>> check_encoding("mac-roman")
 
199
    """
 
200
    ET.XML(
 
201
        "<?xml version='1.0' encoding='%s'?><xml />" % encoding
 
202
        )
 
203
 
 
204
def bug_1534630():
 
205
    """
 
206
    >>> bob = ET.TreeBuilder()
 
207
    >>> e = bob.data("data")
 
208
    >>> e = bob.start("tag", {})
 
209
    >>> e = bob.end("tag")
 
210
    >>> e = bob.close()
 
211
    >>> serialize(ET, e)
 
212
    '<tag />'
 
213
    """
 
214
 
 
215
def test_main():
 
216
    from test import test_xml_etree_c
 
217
    support.run_doctest(test_xml_etree_c, verbosity=True)
 
218
 
 
219
if __name__ == '__main__':
 
220
    test_main()