1 import unittest
2 import os.path
3 from StringIO import StringIO
4 import re
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
46
49
50
51 try:
52 unittest.TestCase.assertFalse
53 except AttributeError:
54 assertFalse = unittest.TestCase.failIf
55
57 - def __init__(self, xml_data='<foo><bar/></foo>'):
58 self.xml_data = xml_data
59
60 - def read(self, amount=None):
61 if self.xml_data:
62 if amount:
63 data = self.xml_data[:amount]
64 self.xml_data = self.xml_data[amount:]
65 else:
66 data = self.xml_data
67 self.xml_data = ''
68 return data
69 return ''
70
72 - def __init__(self, charlen=100, depth=4, children=5):
73 self.data = StringIO()
74 self.chars = 'a' * charlen
75 self.children = range(children)
76 self.more = self.iterelements(depth)
77
79 yield '<root>'
80 depth -= 1
81 if depth > 0:
82 for child in self.children:
83 for element in self.iterelements(depth):
84 yield element
85 yield self.chars
86 else:
87 yield self.chars
88 yield '</root>'
89
90 - def read(self, amount=None):
91 data = self.data
92 append = data.write
93 if amount:
94 for element in self.more:
95 append(element)
96 if data.tell() >= amount:
97 break
98 else:
99 for element in self.more:
100 append(element)
101 result = data.getvalue()
102 data.seek(0)
103 data.truncate()
104 if amount:
105 self.data.write(result[amount:])
106 result = result[:amount]
107 return result
108
110 _testdir = os.path.split(__file__)[0]
111 return os.path.join(_testdir, name)
112
114 f = StringIO(xml)
115 tree = etree.parse(f)
116 f = StringIO()
117 tree.write_c14n(f)
118 return f.getvalue()
119
121 for entity_name, value in re.findall("(&#([0-9]+);)", xml):
122 xml = xml.replace(entity_name, unichr(int(value)))
123 return xml
124