Imported Upstream version 2.9.1
[platform/upstream/libxml2.git] / python / tests / tstLastError.py
1 #!/usr/bin/python -u
2 import sys, unittest
3
4 import libxml2
5
6 class TestCase(unittest.TestCase):
7
8     def runTest(self):
9         self.test1()
10         self.test2()
11
12     def setUp(self):
13         libxml2.debugMemory(1)
14
15     def tearDown(self):
16         libxml2.cleanupParser()
17         if libxml2.debugMemory(1) != 0:
18             libxml2.dumpMemory() 
19             self.fail("Memory leak %d bytes" % (libxml2.debugMemory(1),))
20         else:
21             print("OK")
22
23     def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line):
24         """Run function f, with arguments args and expect an exception exc;
25         when the exception is raised, check the libxml2.lastError for
26         expected values."""
27         # disable the default error handler
28         libxml2.registerErrorHandler(None,None)
29         try:
30             f(*args)
31         except exc:
32             e = libxml2.lastError()
33             if e is None:
34                 self.fail("lastError not set")
35             if 0:
36                 print("domain = ",e.domain())
37                 print("code = ",e.code())
38                 print("message =",repr(e.message()))
39                 print("level =",e.level())
40                 print("file =",e.file())
41                 print("line =",e.line())
42                 print()
43             self.failUnlessEqual(domain,e.domain())
44             self.failUnlessEqual(code,e.code())
45             self.failUnlessEqual(message,e.message())
46             self.failUnlessEqual(level,e.level())
47             self.failUnlessEqual(file,e.file())
48             self.failUnlessEqual(line,e.line())
49         else:
50             self.fail("exception %s should have been raised" % exc)
51
52     def test1(self):
53         """Test readFile with a file that does not exist"""
54         self.failUnlessXmlError(libxml2.readFile,
55                         ("dummy.xml",None,0),
56                         libxml2.treeError,
57                         domain=libxml2.XML_FROM_IO,
58                         code=libxml2.XML_IO_LOAD_ERROR,
59                         message='failed to load external entity "dummy.xml"\n',
60                         level=libxml2.XML_ERR_WARNING,
61                         file=None,
62                         line=0)
63
64     def test2(self):
65         """Test a well-formedness error: we get the last error only"""
66         s = "<x>\n<a>\n</x>"
67         self.failUnlessXmlError(libxml2.readMemory,
68                         (s,len(s),"dummy.xml",None,0),
69                         libxml2.treeError,
70                         domain=libxml2.XML_FROM_PARSER,
71                         code=libxml2.XML_ERR_TAG_NOT_FINISHED,
72                         message='Premature end of data in tag x line 1\n',
73                         level=libxml2.XML_ERR_FATAL,
74                         file='dummy.xml',
75                         line=3)
76
77 if __name__ == "__main__":
78     test = TestCase()
79     test.setUp()
80     test.test1()
81     test.test2()
82     test.tearDown()