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 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 17128 f = TestFile() 129 self.assertRaises(LocalError, self.etree.parse, f) 130 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 156 f = TestFile() 157 self.assertRaises(TypeError, self.etree.parse, f) 158 159 162 163 if ElementTree: 16619 """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)2426 # (c)ElementTree supports filename strings as write argument 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)3537 # (c)ElementTree supports gzip instance as parse argument 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)5052 # (c)ElementTree class ElementTree has a 'parse' method that returns 53 # the root of the tree 54 55 # parse from filename 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)6668 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 # and now do it again; previous content should still be there 74 root2 = tree.parse(filename) 75 self.assertEquals('a', root.tag) 76 self.assertEquals('a', root2.tag) 77 # now remove all references to root2, and parse again 78 del root2 79 root3 = tree.parse(filename) 80 self.assertEquals('a', root.tag) 81 self.assertEquals('a', root3.tag) 82 # root2's memory should've been freed here 83 # XXX how to check? 84 finally: 85 os.close(handle) 86 os.remove(filename)8789 # (c)ElementTree class ElementTree has a 'parse' method that returns 90 # the root of the tree 91 92 # parse from file object 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)105107 # (c)ElementTree class ElementTree has a 'parse' method that returns 108 # the root of the tree 109 110 # parse from unamed file object 111 f = SillyFileLike() 112 root = self.etree.ElementTree().parse(f) 113 self.assert_(root.tag.endswith('foo'))114116 # parse from unamed file object 117 f = LargeFileLike() 118 tree = self.etree.parse(f) 119 root = tree.getroot() 120 self.assert_(root.tag.endswith('root'))121 125 class TestFile: 126 def read(*args): 127 raise LocalError168 suite = unittest.TestSuite() 169 suite.addTests([unittest.makeSuite(ETreeIOTestCase)]) 170 if ElementTree: 171 suite.addTests([unittest.makeSuite(ElementTreeIOTestCase)]) 172 return suite173 174 if __name__ == '__main__': 175 print 'to test use test.py %s' % __file__ 176
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0beta1 on Sun Sep 16 00:12:48 2007 | http://epydoc.sourceforge.net |