1 import os
2 import os.path
3 import re
4 import gc
5 import sys
6 import unittest
7
8 from lxml import etree
9
11 l = []
12 for part in re.findall('([0-9]+|[^0-9.]+)', version_string):
13 try:
14 l.append(int(part))
15 except ValueError:
16 l.append(part)
17 return tuple(l)
18
19 IS_PYPY = (getattr(sys, 'implementation', None) == 'pypy' or
20 getattr(sys, 'pypy_version_info', None) is not None)
21
22 IS_PYTHON3 = sys.version_info[0] >= 3
23
24 try:
25 from xml.etree import ElementTree
26 except ImportError:
27 try:
28 from elementtree import ElementTree
29 except ImportError:
30 ElementTree = None
31
32 if hasattr(ElementTree, 'VERSION'):
33 ET_VERSION = make_version_tuple(ElementTree.VERSION)
34 else:
35 ET_VERSION = (0,0,0)
36
37 try:
38 from xml.etree import cElementTree
39 except ImportError:
40 try:
41 import cElementTree
42 except ImportError:
43 cElementTree = None
44
45 if hasattr(cElementTree, 'VERSION'):
46 CET_VERSION = make_version_tuple(cElementTree.VERSION)
47 else:
48 CET_VERSION = (0,0,0)
49
51 """Remove test methods that do not work with the current lib version.
52 """
53 find_required_version = version_dict.get
54 def dummy_test_method(self):
55 pass
56 for name in dir(test_class):
57 expected_version = find_required_version(name, (0,0,0))
58 if expected_version > current_version:
59 setattr(test_class, name, dummy_test_method)
60
61 try:
62 import doctest
63
64 doctest.DocFileSuite
65 doctest.DocTestParser
66 doctest.NORMALIZE_WHITESPACE
67 doctest.ELLIPSIS
68 except (ImportError, AttributeError):
69
70 import local_doctest as doctest
71
72 try:
73 sorted
74 except NameError:
76 seq = list(seq)
77 seq.sort(**kwargs)
78 return seq
79 else:
80 locals()['sorted'] = sorted
81
82
83 try:
84 next
85 except NameError:
88 else:
89 locals()['next'] = next
90
91
92 try:
93 import pytest
94 except ImportError:
96 "Using a class because a function would bind into a method when used in classes"
98 - def __call__(self, func, *args): return func
99 else:
100 skipif = pytest.mark.skipif
101
103 module = sys.modules[sys._getframe(frame_depth).f_globals['__name__']]
104 return os.path.normpath(os.path.join(
105 os.path.dirname(getattr(module, '__file__', '')), filename))
106
107 if sys.version_info[0] >= 3:
108
109 from builtins import str as unicode
110 - def _str(s, encoding="UTF-8"):
112 - def _bytes(s, encoding="UTF-8"):
114 from io import StringIO, BytesIO as _BytesIO
116 if args and isinstance(args[0], str):
117 args = (args[0].encode("UTF-8"),)
118 return _BytesIO(*args)
119
120 doctest_parser = doctest.DocTestParser()
121 _fix_unicode = re.compile(r'(\s+)u(["\'])').sub
122 _fix_exceptions = re.compile(r'(.*except [^(]*),\s*(.*:)').sub
131 else:
132
133 from __builtin__ import unicode
134 - def _str(s, encoding="UTF-8"):
136 - def _bytes(s, encoding="UTF-8"):
138 from StringIO import StringIO
139 BytesIO = StringIO
140
141 doctest_parser = doctest.DocTestParser()
142 _fix_traceback = re.compile(r'^(\s*)(?:\w+\.)+(\w*(?:Error|Exception|Invalid):)', re.M).sub
143 _fix_exceptions = re.compile(r'(.*except [^(]*)\s+as\s+(.*:)').sub
144 _fix_bytes = re.compile(r'(\s+)b(["\'])').sub
154
155 try:
156 skipIf = unittest.skipIf
157 except AttributeError:
158 - def skipIf(condition, why,
159 _skip=lambda test_method: None,
160 _keep=lambda test_method: test_method):
161 if condition:
162 return _skip
163 return _keep
164
168
169 - def parse(self, text, parser=None):
172
176
177
178 try:
179 unittest.TestCase.assertFalse
180 except AttributeError:
181 assertFalse = unittest.TestCase.failIf
182
185 self.xml_data = xml_data
186
187 - def read(self, amount=None):
188 if self.xml_data:
189 if amount:
190 data = self.xml_data[:amount]
191 self.xml_data = self.xml_data[amount:]
192 else:
193 data = self.xml_data
194 self.xml_data = _bytes('')
195 return data
196 return _bytes('')
197
199 - def __init__(self, charlen=100, depth=4, children=5):
200 self.data = BytesIO()
201 self.chars = _bytes('a') * charlen
202 self.children = range(children)
203 self.more = self.iterelements(depth)
204
206 yield _bytes('<root>')
207 depth -= 1
208 if depth > 0:
209 for child in self.children:
210 for element in self.iterelements(depth):
211 yield element
212 yield self.chars
213 else:
214 yield self.chars
215 yield _bytes('</root>')
216
217 - def read(self, amount=None):
218 data = self.data
219 append = data.write
220 if amount:
221 for element in self.more:
222 append(element)
223 if data.tell() >= amount:
224 break
225 else:
226 for element in self.more:
227 append(element)
228 result = data.getvalue()
229 data.seek(0)
230 data.truncate()
231 if amount:
232 append(result[amount:])
233 result = result[:amount]
234 return result
235
237 - def __init__(self, charlen=100, depth=4, children=5):
242
244 yield _str('<root>')
245 depth -= 1
246 if depth > 0:
247 for child in self.children:
248 for element in self.iterelements(depth):
249 yield element
250 yield self.chars
251 else:
252 yield self.chars
253 yield _str('</root>')
254
256 _testdir = os.path.dirname(__file__)
257 return os.path.join(_testdir, name)
258
261
269
276
279
285
290