Upload Tizen:Base source
[toolchains/python-lxml.git] / src / lxml / tests / test_errors.py
1 # -*- coding: utf-8 -*-
2 import unittest, doctest
3
4 # These tests check that error handling in the Pyrex code is
5 # complete.
6 # It is likely that if there are errors, instead of failing the code
7 # will simply crash.
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) # needed for Py3
15
16 from common_imports import HelperTestCase
17
18 class ErrorTestCase(HelperTestCase):
19     etree = etree
20
21     def test_bad_element(self):
22         # attrib argument of Element() should be a dictionary, so if
23         # we pass a string we should get an error.
24         self.assertRaises(TypeError, self.etree.Element, 'a', 'b')
25
26     def test_empty_parse(self):
27         self.assertRaises(etree.XMLSyntaxError, etree.fromstring, '')
28
29     def test_element_cyclic_gc_none(self):
30         # test if cyclic reference can crash etree
31         Element = self.etree.Element
32         gc.collect()
33
34         count = sys.getrefcount(None)
35
36         l = [Element('name'), Element('name')]
37         l.append(l)
38
39         del l
40         gc.collect()
41
42         self.assertEquals(sys.getrefcount(None), count)
43
44 def test_suite():
45     suite = unittest.TestSuite()
46     suite.addTests([unittest.makeSuite(ErrorTestCase)])
47     return suite
48
49 if __name__ == '__main__':
50     print('to test use test.py %s' % __file__)