38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#!/usr/bin/python -u
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport sys, unittest
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport libxml2
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncclass TestCase(unittest.TestCase):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def runTest(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.test1()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.test2()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def setUp(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.debugMemory(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def tearDown(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.cleanupParser()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if libxml2.debugMemory(1) != 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.dumpMemory()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.fail("Memory leak %d bytes" % (libxml2.debugMemory(1),))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "OK"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync """Run function f, with arguments args and expect an exception exc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync when the exception is raised, check the libxml2.lastError for
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync expected values."""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync # disable the default error handler
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.registerErrorHandler(None,None)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync try:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync apply(f,args)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync except exc:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync e = libxml2.lastError()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if e is None:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.fail("lastError not set")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "domain = ",e.domain()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "code = ",e.code()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "message =",repr(e.message())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "level =",e.level()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "file =",e.file()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "line =",e.line()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessEqual(domain,e.domain())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessEqual(code,e.code())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessEqual(message,e.message())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessEqual(level,e.level())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessEqual(file,e.file())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessEqual(line,e.line())
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.fail("exception %s should have been raised" % exc)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def test1(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync """Test readFile with a file that does not exist"""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessXmlError(libxml2.readFile,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ("dummy.xml",None,0),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.treeError,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync domain=libxml2.XML_FROM_IO,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync code=libxml2.XML_IO_LOAD_ERROR,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync message='failed to load external entity "dummy.xml"\n',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync level=libxml2.XML_ERR_WARNING,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync file=None,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync line=0)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync def test2(self):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync """Test a well-formedness error: we get the last error only"""
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync s = "<x>\n<a>\n</x>"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync self.failUnlessXmlError(libxml2.readMemory,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (s,len(s),"dummy.xml",None,0),
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.treeError,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync domain=libxml2.XML_FROM_PARSER,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync code=libxml2.XML_ERR_TAG_NOT_FINISHED,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync message='Premature end of data in tag x line 1\n',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync level=libxml2.XML_ERR_FATAL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync file='dummy.xml',
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync line=3)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif __name__ == "__main__":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync test = TestCase()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync test.setUp()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync test.test1()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync test.test2()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync test.tearDown()