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 IS_PYPY = (getattr(sys, 'implementation', None) == 'pypy' or
17 getattr(sys, 'pypy_version_info', None) is not None)
18
19 IS_PYTHON3 = sys.version_info[0] >= 3
20
21 try:
22 from xml.etree import ElementTree
23 except ImportError:
24 try:
25 from elementtree import ElementTree
26 except ImportError:
27 ElementTree = None
28
29 if hasattr(ElementTree, 'VERSION'):
30 ET_VERSION = make_version_tuple(ElementTree.VERSION)
31 else:
32 ET_VERSION = (0,0,0)
33
34 try:
35 from xml.etree import cElementTree
36 except ImportError:
37 try:
38 import cElementTree
39 except ImportError:
40 cElementTree = None
41
42 if hasattr(cElementTree, 'VERSION'):
43 CET_VERSION = make_version_tuple(cElementTree.VERSION)
44 else:
45 CET_VERSION = (0,0,0)
46
48 """Remove test methods that do not work with the current lib version.
49 """
50 find_required_version = version_dict.get
51 def dummy_test_method(self):
52 pass
53 for name in dir(test_class):
54 expected_version = find_required_version(name, (0,0,0))
55 if expected_version > current_version:
56 setattr(test_class, name, dummy_test_method)
57
58 try:
59 import doctest
60
61 doctest.DocFileSuite
62 doctest.DocTestParser
63 doctest.NORMALIZE_WHITESPACE
64 doctest.ELLIPSIS
65 except (ImportError, AttributeError):
66
67 import local_doctest as doctest
68
69 try:
70 sorted
71 except NameError:
73 seq = list(seq)
74 seq.sort(**kwargs)
75 return seq
76 else:
77 locals()['sorted'] = sorted
78
79
80 try:
81 next
82 except NameError:
85 else:
86 locals()['next'] = next
87
88
89 try:
90 import pytest
91 except ImportError:
93 "Using a class because a function would bind into a method when used in classes"
95 - def __call__(self, func, *args): return func
96 else:
97 skipif = pytest.mark.skipif
98
100 module = sys.modules[sys._getframe(frame_depth).f_globals['__name__']]
101 return os.path.normpath(os.path.join(
102 os.path.dirname(getattr(module, '__file__', '')), filename))
103
104 if sys.version_info[0] >= 3:
105
106 from builtins import str as unicode
107 - def _str(s, encoding="UTF-8"):
109 - def _bytes(s, encoding="UTF-8"):
111 from io import StringIO, BytesIO as _BytesIO
113 if args and isinstance(args[0], str):
114 args = (args[0].encode("UTF-8"),)
115 return _BytesIO(*args)
116
117 doctest_parser = doctest.DocTestParser()
118 _fix_unicode = re.compile(r'(\s+)u(["\'])').sub
119 _fix_exceptions = re.compile(r'(.*except [^(]*),\s*(.*:)').sub
128 else:
129
130 from __builtin__ import unicode
131 - def _str(s, encoding="UTF-8"):
133 - def _bytes(s, encoding="UTF-8"):
135 from StringIO import StringIO
136 BytesIO = StringIO
137
138 doctest_parser = doctest.DocTestParser()
139 _fix_traceback = re.compile(r'^(\s*)(?:\w+\.)+(\w*(?:Error|Exception|Invalid):)', re.M).sub
140 _fix_exceptions = re.compile(r'(.*except [^(]*)\s+as\s+(.*:)').sub
141 _fix_bytes = re.compile(r'(\s+)b(["\'])').sub
151
152 try:
153 skipIf = unittest.skipIf
154 except AttributeError:
155 - def skipIf(condition, why,
156 _skip=lambda test_method: None,
157 _keep=lambda test_method: test_method):
158 if condition:
159 return _skip
160 return _keep
161
165
166 - def parse(self, text, parser=None):
169
173
174
175 try:
176 unittest.TestCase.assertFalse
177 except AttributeError:
178 assertFalse = unittest.TestCase.failIf
179
182 self.xml_data = xml_data
183
184 - def read(self, amount=None):
185 if self.xml_data:
186 if amount:
187 data = self.xml_data[:amount]
188 self.xml_data = self.xml_data[amount:]
189 else:
190 data = self.xml_data
191 self.xml_data = _bytes('')
192 return data
193 return _bytes('')
194
196 - def __init__(self, charlen=100, depth=4, children=5):
197 self.data = BytesIO()
198 self.chars = _bytes('a') * charlen
199 self.children = range(children)
200 self.more = self.iterelements(depth)
201
203 yield _bytes('<root>')
204 depth -= 1
205 if depth > 0:
206 for child in self.children:
207 for element in self.iterelements(depth):
208 yield element
209 yield self.chars
210 else:
211 yield self.chars
212 yield _bytes('</root>')
213
214 - def read(self, amount=None):
215 data = self.data
216 append = data.write
217 if amount:
218 for element in self.more:
219 append(element)
220 if data.tell() >= amount:
221 break
222 else:
223 for element in self.more:
224 append(element)
225 result = data.getvalue()
226 data.seek(0)
227 data.truncate()
228 if amount:
229 append(result[amount:])
230 result = result[:amount]
231 return result
232
234 - def __init__(self, charlen=100, depth=4, children=5):
239
241 yield _str('<root>')
242 depth -= 1
243 if depth > 0:
244 for child in self.children:
245 for element in self.iterelements(depth):
246 yield element
247 yield self.chars
248 else:
249 yield self.chars
250 yield _str('</root>')
251
253 _testdir = os.path.dirname(__file__)
254 return os.path.join(_testdir, name)
255
263
270
273
279
284