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 try:
17 import cElementTree
18 except ImportError:
19 try:
20 from xml.etree import cElementTree
21 except ImportError:
22 cElementTree = None
23
24 try:
25 import doctest
26
27 doctest.DocFileSuite
28 doctest.NORMALIZE_WHITESPACE
29 doctest.ELLIPSIS
30 except (ImportError, AttributeError):
31
32 import local_doctest as doctest
33
34 try:
35 sorted
36 except NameError:
38 seq = list(seq)
39 seq.sort(**kwargs)
40 return seq
41
45
49
52
53
54 try:
55 unittest.TestCase.assertFalse
56 except AttributeError:
57 assertFalse = unittest.TestCase.failIf
58
60 - def __init__(self, xml_data='<foo><bar/></foo>'):
61 self.xml_data = xml_data
62
63 - def read(self, amount=None):
64 if self.xml_data:
65 if amount:
66 data = self.xml_data[:amount]
67 self.xml_data = self.xml_data[amount:]
68 else:
69 data = self.xml_data
70 self.xml_data = ''
71 return data
72 return ''
73
75 - def __init__(self, charlen=100, depth=4, children=5):
76 self.data = StringIO()
77 self.chars = 'a' * charlen
78 self.children = range(children)
79 self.more = self.iterelements(depth)
80
82 yield '<root>'
83 depth -= 1
84 if depth > 0:
85 for child in self.children:
86 for element in self.iterelements(depth):
87 yield element
88 yield self.chars
89 else:
90 yield self.chars
91 yield '</root>'
92
93 - def read(self, amount=None):
94 data = self.data
95 append = data.write
96 if amount:
97 for element in self.more:
98 append(element)
99 if data.tell() >= amount:
100 break
101 else:
102 for element in self.more:
103 append(element)
104 result = data.getvalue()
105 data.seek(0)
106 data.truncate()
107 if amount:
108 self.data.write(result[amount:])
109 result = result[:amount]
110 return result
111
113 _testdir = os.path.split(__file__)[0]
114 return os.path.join(_testdir, name)
115
117 f = StringIO(xml)
118 tree = etree.parse(f)
119 f = StringIO()
120 tree.write_c14n(f)
121 return f.getvalue()
122
124 for entity_name, value in re.findall("(&#([0-9]+);)", xml):
125 xml = xml.replace(entity_name, unichr(int(value)))
126 return xml
127