Home | History | Annotate | Download | only in tests
      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()
     83