1
2
3 """
4 IO test cases that apply to both etree and ElementTree
5 """
6
7 import unittest
8 import tempfile, gzip, os
9
10 from common_imports import etree, ElementTree, fileInTestDir
11 from common_imports import SillyFileLike, LargeFileLike
12
14 """(c)ElementTree compatibility for IO functions/methods
15 """
16 etree = None
17
24
26
27
28 handle, filename = tempfile.mkstemp(suffix=".xml")
29 self.tree.write(filename)
30 try:
31 self.assertEqual(open(filename).read(), self.root_str)
32 finally:
33 os.close(handle)
34 os.remove(filename)
35
37
38 handle, filename = tempfile.mkstemp(suffix=".xml.gz")
39 f = gzip.open(filename, 'wb')
40 f.write(self.root_str)
41 f.close()
42 try:
43 f_gz = gzip.open(filename, 'r')
44 tree = self.etree.parse(f_gz)
45 f_gz.close()
46 self.assertEqual(self.etree.tostring(tree.getroot()), self.root_str)
47 finally:
48 os.close(handle)
49 os.remove(filename)
50
52
53
54
55
56
57 handle, filename = tempfile.mkstemp(suffix=".xml")
58 open(filename, 'wb').write(self.root_str)
59 try:
60 tree = self.etree.ElementTree()
61 root = tree.parse(filename)
62 self.assertEqual(self.etree.tostring(root), self.root_str)
63 finally:
64 os.close(handle)
65 os.remove(filename)
66
68 handle, filename = tempfile.mkstemp(suffix=".xml")
69 open(filename, 'wb').write(self.root_str)
70 try:
71 tree = self.etree.ElementTree()
72 root = tree.parse(filename)
73
74 root2 = tree.parse(filename)
75 self.assertEquals('a', root.tag)
76 self.assertEquals('a', root2.tag)
77
78 del root2
79 root3 = tree.parse(filename)
80 self.assertEquals('a', root.tag)
81 self.assertEquals('a', root3.tag)
82
83
84 finally:
85 os.close(handle)
86 os.remove(filename)
87
89
90
91
92
93
94 handle, filename = tempfile.mkstemp(suffix=".xml")
95 os.write(handle, self.root_str)
96 try:
97 f = open(filename, 'r')
98 tree = self.etree.ElementTree()
99 root = tree.parse(f)
100 f.close()
101 self.assertEqual(self.etree.tostring(root), self.root_str)
102 finally:
103 os.close(handle)
104 os.remove(filename)
105
114
121
123 class LocalError(Exception):
124 pass
125 class TestFile:
126 def read(*args):
127 raise LocalError
128 f = TestFile()
129 self.assertRaises(LocalError, self.etree.parse, f)
130
132 class LocalError(Exception):
133 pass
134 class TestFile:
135 data = '<root>test</'
136 next_char = iter(data).next
137 counter = 0
138 def read(self, amount=None):
139 if amount is None:
140 while True:
141 self.read(1)
142 else:
143 try:
144 self.counter += 1
145 return self.next_char()
146 except StopIteration:
147 raise LocalError
148 f = TestFile()
149 self.assertRaises(LocalError, self.etree.parse, f)
150 self.assertEquals(f.counter, len(f.data)+1)
151
153 class TestFile:
154 def read(*args):
155 return 1
156 f = TestFile()
157 self.assertRaises(TypeError, self.etree.parse, f)
158
159
162
163 if ElementTree:
166
173
174 if __name__ == '__main__':
175 unittest.main()
176