1 import unittest
2 import os.path
3 from StringIO import StringIO
4 import re, gc
5
6 from lxml import etree
7
8 try:
9 from elementtree import ElementTree
10 except ImportError:
11 try:
12 from xml.etree import ElementTree
13 except ImportError:
14 ElementTree = None
15
16 if hasattr(ElementTree, 'VERSION'):
17 if tuple(ElementTree.VERSION.split('.')) < (1,3):
18
19 ElementTree = None
20
21 try:
22 import cElementTree
23 except ImportError:
24 try:
25 from xml.etree import cElementTree
26 except ImportError:
27 cElementTree = None
28
29 if hasattr(cElementTree, 'VERSION'):
30 if tuple(cElementTree.VERSION.split('.')) < (1,0,7):
31
32 cElementTree = None
33
34 try:
35 import doctest
36
37 doctest.DocFileSuite
38 doctest.NORMALIZE_WHITESPACE
39 doctest.ELLIPSIS
40 except (ImportError, AttributeError):
41
42 import local_doctest as doctest
43
44 try:
45 sorted
46 except NameError:
48 seq = list(seq)
49 seq.sort(**kwargs)
50 return seq
51
55
56 - def parse(self, text, parser=None):
59
62
63
64 try:
65 unittest.TestCase.assertFalse
66 except AttributeError:
67 assertFalse = unittest.TestCase.failIf
68
70 - def __init__(self, xml_data='<foo><bar/></foo>'):
71 self.xml_data = xml_data
72
73 - def read(self, amount=None):
74 if self.xml_data:
75 if amount:
76 data = self.xml_data[:amount]
77 self.xml_data = self.xml_data[amount:]
78 else:
79 data = self.xml_data
80 self.xml_data = ''
81 return data
82 return ''
83
85 - def __init__(self, charlen=100, depth=4, children=5):
86 self.data = StringIO()
87 self.chars = 'a' * charlen
88 self.children = range(children)
89 self.more = self.iterelements(depth)
90
92 yield '<root>'
93 depth -= 1
94 if depth > 0:
95 for child in self.children:
96 for element in self.iterelements(depth):
97 yield element
98 yield self.chars
99 else:
100 yield self.chars
101 yield '</root>'
102
103 - def read(self, amount=None):
104 data = self.data
105 append = data.write
106 if amount:
107 for element in self.more:
108 append(element)
109 if data.tell() >= amount:
110 break
111 else:
112 for element in self.more:
113 append(element)
114 result = data.getvalue()
115 data.seek(0)
116 data.truncate()
117 if amount:
118 self.data.write(result[amount:])
119 result = result[:amount]
120 return result
121
123 _testdir = os.path.split(__file__)[0]
124 return os.path.join(_testdir, name)
125
127 f = StringIO(xml)
128 tree = etree.parse(f)
129 f = StringIO()
130 tree.write_c14n(f)
131 return f.getvalue()
132
134 for entity_name, value in re.findall("(&#([0-9]+);)", xml):
135 xml = xml.replace(entity_name, unichr(int(value)))
136 return xml
137