1 import unittest
2 import os.path
3 import re, gc, sys
4
5 from lxml import etree
6
8 l = []
9 for part in re.findall('([0-9]+|[^0-9.]+)', version_string):
10 try:
11 l.append(int(part))
12 except ValueError:
13 l.append(part)
14 return tuple(l)
15
16 try:
17 from elementtree import ElementTree
18 except ImportError:
19 try:
20 from xml.etree import ElementTree
21 except ImportError:
22 ElementTree = None
23
24 if hasattr(ElementTree, 'VERSION'):
25 ET_VERSION = make_version_tuple(ElementTree.VERSION)
26 else:
27 ET_VERSION = (0,0,0)
28
29 try:
30 import cElementTree
31 except ImportError:
32 try:
33 from xml.etree import cElementTree
34 except ImportError:
35 cElementTree = None
36
37 if hasattr(cElementTree, 'VERSION'):
38 CET_VERSION = make_version_tuple(cElementTree.VERSION)
39 else:
40 CET_VERSION = (0,0,0)
41
43 """Remove test methods that do not work with the current lib version.
44 """
45 find_required_version = version_dict.get
46 def dummy_test_method(self):
47 pass
48 for name in dir(test_class):
49 expected_version = find_required_version(name, (0,0,0))
50 if expected_version > current_version:
51 setattr(test_class, name, dummy_test_method)
52
53 try:
54 import doctest
55
56 doctest.DocFileSuite
57 doctest.DocTestParser
58 doctest.NORMALIZE_WHITESPACE
59 doctest.ELLIPSIS
60 except (ImportError, AttributeError):
61
62 import local_doctest as doctest
63
64 try:
65 sorted
66 except NameError:
68 seq = list(seq)
69 seq.sort(**kwargs)
70 return seq
71 else:
72 locals()['sorted'] = sorted
73
75 module = sys.modules[sys._getframe(frame_depth).f_globals['__name__']]
76 return os.path.normpath(os.path.join(
77 os.path.dirname(getattr(module, '__file__', '')), filename))
78
79 if sys.version_info[0] >= 3:
80
81 unicode = str
82 - def _str(s, encoding="UTF-8"):
84 - def _bytes(s, encoding="UTF-8"):
86 from io import StringIO, BytesIO as _BytesIO
88 if args and isinstance(args[0], str):
89 args = (args[0].encode("UTF-8"),)
90 return _BytesIO(*args)
91
92 doctest_parser = doctest.DocTestParser()
93 _fix_unicode = re.compile(r'(\s+)u(["\'])').sub
94 _fix_exceptions = re.compile(r'(.*except [^(]*),\s*(.*:)').sub
103 else:
104
105 - def _str(s, encoding="UTF-8"):
107 - def _bytes(s, encoding="UTF-8"):
109 from StringIO import StringIO
110 BytesIO = StringIO
111
112 doctest_parser = doctest.DocTestParser()
113 _fix_traceback = re.compile(r'^(\s*)(?:\w+\.)+(\w*(?:Error|Exception|Invalid):)', re.M).sub
114 _fix_exceptions = re.compile(r'(.*except [^(]*)\s+as\s+(.*:)').sub
115 _fix_bytes = re.compile(r'(\s+)b(["\'])').sub
125
129
130 - def parse(self, text, parser=None):
133
137
138
139 try:
140 unittest.TestCase.assertFalse
141 except AttributeError:
142 assertFalse = unittest.TestCase.failIf
143
146 self.xml_data = xml_data
147
148 - def read(self, amount=None):
149 if self.xml_data:
150 if amount:
151 data = self.xml_data[:amount]
152 self.xml_data = self.xml_data[amount:]
153 else:
154 data = self.xml_data
155 self.xml_data = _bytes('')
156 return data
157 return _bytes('')
158
160 - def __init__(self, charlen=100, depth=4, children=5):
161 self.data = BytesIO()
162 self.chars = _bytes('a') * charlen
163 self.children = range(children)
164 self.more = self.iterelements(depth)
165
167 yield _bytes('<root>')
168 depth -= 1
169 if depth > 0:
170 for child in self.children:
171 for element in self.iterelements(depth):
172 yield element
173 yield self.chars
174 else:
175 yield self.chars
176 yield _bytes('</root>')
177
178 - def read(self, amount=None):
179 data = self.data
180 append = data.write
181 if amount:
182 for element in self.more:
183 append(element)
184 if data.tell() >= amount:
185 break
186 else:
187 for element in self.more:
188 append(element)
189 result = data.getvalue()
190 data.seek(0)
191 data.truncate()
192 if amount:
193 append(result[amount:])
194 result = result[:amount]
195 return result
196
198 - def __init__(self, charlen=100, depth=4, children=5):
203
205 yield _str('<root>')
206 depth -= 1
207 if depth > 0:
208 for child in self.children:
209 for element in self.iterelements(depth):
210 yield element
211 yield self.chars
212 else:
213 yield self.chars
214 yield _str('</root>')
215
217 _testdir = os.path.dirname(__file__)
218 return os.path.join(_testdir, name)
219
226
231