Home | Trees | Indices | Help |
|
---|
|
1 # -*- coding: utf-8 -*- 2 3 """ 4 IO test cases that apply to both etree and ElementTree 5 """ 6 7 import unittest 8 import tempfile, gzip, os, gc, shutil 9 10 from common_imports import etree, ElementTree, fileInTestDir 11 from common_imports import SillyFileLike, LargeFileLike 1214 """(c)ElementTree compatibility for IO functions/methods 15 """ 16 etree = None 17170 f = TestFile() 171 self.assertRaises(LocalError, self.etree.parse, f) 172 176 class TestFile: 177 data = '<root>test</' 178 next_char = iter(data).next 179 counter = 0 180 def read(self, amount=None): 181 if amount is None: 182 while True: 183 self.read(1) 184 else: 185 try: 186 self.counter += 1 187 return self.next_char() 188 except StopIteration: 189 raise LocalError 190 f = TestFile() 191 self.assertRaises(LocalError, self.etree.parse, f) 192 self.assertEquals(f.counter, len(f.data)+1) 193 198 f = TestFile() 199 self.assertRaises(TypeError, self.etree.parse, f) 200 201 204 205 if ElementTree: 20819 """Setting up a minimal tree 20 """ 21 self.root = self.etree.Element('a') 22 self.root_str = self.etree.tostring(self.root) 23 self.tree = self.etree.ElementTree(self.root) 24 self._temp_dir = tempfile.mkdtemp()25 29 3234 Element = self.etree.Element 35 36 if depth == 0: 37 return 38 for i in range(children): 39 new_element = Element('element_%s_%s' % (depth, i)) 40 self.buildNodes(new_element, children, depth - 1) 41 element.append(new_element)4244 Element = self.etree.Element 45 ElementTree = self.etree.ElementTree 46 47 element = Element('top') 48 tree = ElementTree(element) 49 self.buildNodes(element, 10, 3) 50 f = open(self.getTestFilePath('testdump.xml'), 'w') 51 tree.write(f, encoding='UTF-8') 52 f.close() 53 f = open(self.getTestFilePath('testdump.xml'), 'r') 54 tree = ElementTree(file=f) 55 f.close() 56 f = open(self.getTestFilePath('testdump2.xml'), 'w') 57 tree.write(f, encoding='UTF-8') 58 f.close() 59 f = open(self.getTestFilePath('testdump.xml'), 'r') 60 data1 = f.read() 61 f.close() 62 f = open(self.getTestFilePath('testdump2.xml'), 'r') 63 data2 = f.read() 64 f.close() 65 self.assertEquals(data1, data2)6668 # (c)ElementTree supports filename strings as write argument 69 70 handle, filename = tempfile.mkstemp(suffix=".xml") 71 self.tree.write(filename) 72 try: 73 self.assertEqual(open(filename).read(), self.root_str) 74 finally: 75 os.close(handle) 76 os.remove(filename)7779 # (c)ElementTree supports gzip instance as parse argument 80 handle, filename = tempfile.mkstemp(suffix=".xml.gz") 81 f = gzip.open(filename, 'wb') 82 f.write(self.root_str) 83 f.close() 84 try: 85 f_gz = gzip.open(filename, 'r') 86 tree = self.etree.parse(f_gz) 87 f_gz.close() 88 self.assertEqual(self.etree.tostring(tree.getroot()), self.root_str) 89 finally: 90 os.close(handle) 91 os.remove(filename)9294 # (c)ElementTree class ElementTree has a 'parse' method that returns 95 # the root of the tree 96 97 # parse from filename 98 99 handle, filename = tempfile.mkstemp(suffix=".xml") 100 open(filename, 'wb').write(self.root_str) 101 try: 102 tree = self.etree.ElementTree() 103 root = tree.parse(filename) 104 self.assertEqual(self.etree.tostring(root), self.root_str) 105 finally: 106 os.close(handle) 107 os.remove(filename)108110 handle, filename = tempfile.mkstemp(suffix=".xml") 111 open(filename, 'wb').write(self.root_str) 112 try: 113 tree = self.etree.ElementTree() 114 root = tree.parse(filename) 115 # and now do it again; previous content should still be there 116 root2 = tree.parse(filename) 117 self.assertEquals('a', root.tag) 118 self.assertEquals('a', root2.tag) 119 # now remove all references to root2, and parse again 120 del root2 121 root3 = tree.parse(filename) 122 self.assertEquals('a', root.tag) 123 self.assertEquals('a', root3.tag) 124 # root2's memory should've been freed here 125 # XXX how to check? 126 finally: 127 os.close(handle) 128 os.remove(filename)129131 # (c)ElementTree class ElementTree has a 'parse' method that returns 132 # the root of the tree 133 134 # parse from file object 135 136 handle, filename = tempfile.mkstemp(suffix=".xml") 137 os.write(handle, self.root_str) 138 try: 139 f = open(filename, 'r') 140 tree = self.etree.ElementTree() 141 root = tree.parse(f) 142 f.close() 143 self.assertEqual(self.etree.tostring(root), self.root_str) 144 finally: 145 os.close(handle) 146 os.remove(filename)147149 # (c)ElementTree class ElementTree has a 'parse' method that returns 150 # the root of the tree 151 152 # parse from unamed file object 153 f = SillyFileLike() 154 root = self.etree.ElementTree().parse(f) 155 self.assert_(root.tag.endswith('foo'))156158 # parse from unamed file object 159 f = LargeFileLike() 160 tree = self.etree.parse(f) 161 root = tree.getroot() 162 self.assert_(root.tag.endswith('root'))163 167 class TestFile: 168 def read(*args): 169 raise LocalError210 suite = unittest.TestSuite() 211 suite.addTests([unittest.makeSuite(ETreeIOTestCase)]) 212 if ElementTree: 213 suite.addTests([unittest.makeSuite(ElementTreeIOTestCase)]) 214 return suite215 216 if __name__ == '__main__': 217 print 'to test use test.py %s' % __file__ 218
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0beta1 on Sun Nov 25 11:48:44 2007 | http://epydoc.sourceforge.net |