1
2 import unittest, doctest
3
4
5
6
7
8
9 import sys, gc, os.path
10 from lxml import etree
11
12 this_dir = os.path.dirname(__file__)
13 if this_dir not in sys.path:
14 sys.path.insert(0, this_dir)
15
16 from common_imports import HelperTestCase
17
18
20 etree = etree
21
23
24
25 self.assertRaises(TypeError, self.etree.Element, 'a', 'b')
26
29
31
32 Element = self.etree.Element
33 getrefcount = sys.getrefcount
34
35
36 trace_func = sys.gettrace()
37 try:
38 sys.settrace(None)
39 gc.collect()
40
41 count = getrefcount(None)
42
43 l = [Element('name'), Element('name')]
44 l.append(l)
45
46 del l
47 gc.collect()
48 count = getrefcount(None) - count
49
50 self.assertEqual(count, 0)
51 finally:
52 sys.settrace(trace_func)
53
55 broken_xml_name = 'test_broken.xml'
56 broken_xml_path = os.path.join(this_dir, broken_xml_name)
57 fail_msg = 'test_broken.xml should raise an etree.XMLSyntaxError'
58 try:
59 etree.parse(broken_xml_path)
60 except etree.XMLSyntaxError as e:
61
62 self.assertEqual(e.position, (e.lineno, e.offset + 1), 'position and lineno/offset out of sync')
63
64 self.assertTrue(e.filename.endswith(broken_xml_name), 'filename must be preserved')
65 self.assertEqual(e.lineno, 1)
66 self.assertEqual(e.offset, 10)
67 except Exception as e:
68 self.fail('{0}, not {1}'.format(fail_msg, type(e)))
69 else:
70 self.fail('test_broken.xml should raise an etree.XMLSyntaxError')
71
72
74 suite = unittest.TestSuite()
75 suite.addTests([unittest.makeSuite(ErrorTestCase)])
76 return suite
77
78 if __name__ == '__main__':
79 print('to test use test.py %s' % __file__)
80