You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.9 KiB
86 lines
2.9 KiB
#!/usr/bin/python -u
|
|
import sys, unittest
|
|
|
|
import libxml2
|
|
|
|
class TestCase(unittest.TestCase):
|
|
|
|
def runTest(self):
|
|
self.test1()
|
|
self.test2()
|
|
|
|
def setUp(self):
|
|
libxml2.debugMemory(1)
|
|
|
|
def tearDown(self):
|
|
libxml2.cleanupParser()
|
|
if libxml2.debugMemory(1) != 0:
|
|
libxml2.dumpMemory()
|
|
self.fail("Memory leak %d bytes" % (libxml2.debugMemory(1),))
|
|
else:
|
|
print("OK")
|
|
|
|
def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line):
|
|
"""Run function f, with arguments args and expect an exception exc;
|
|
when the exception is raised, check the libxml2.lastError for
|
|
expected values."""
|
|
# disable the default error handler
|
|
def noerr(ctx, str):
|
|
pass
|
|
# None is not acceptable as function.
|
|
libxml2.registerErrorHandler(noerr,None)
|
|
try:
|
|
f(*args)
|
|
except exc:
|
|
e = libxml2.lastError()
|
|
if e is None:
|
|
self.fail("lastError not set")
|
|
if 0:
|
|
print("domain = ",e.domain())
|
|
print("code = ",e.code())
|
|
print("message =",repr(e.message()))
|
|
print("level =",e.level())
|
|
print("file =",e.file())
|
|
print("line =",e.line())
|
|
print()
|
|
self.assertEqual(domain,e.domain())
|
|
self.assertEqual(code,e.code())
|
|
self.assertEqual(message,e.message())
|
|
self.assertEqual(level,e.level())
|
|
self.assertEqual(file,e.file())
|
|
self.assertEqual(line,e.line())
|
|
else:
|
|
self.fail("exception %s should have been raised" % exc)
|
|
|
|
def test1(self):
|
|
"""Test readFile with a file that does not exist"""
|
|
self.failUnlessXmlError(libxml2.readFile,
|
|
("dummy.xml",None,0),
|
|
libxml2.treeError,
|
|
domain=libxml2.XML_FROM_IO,
|
|
code=libxml2.XML_IO_LOAD_ERROR,
|
|
message='failed to load external entity "dummy.xml"\n',
|
|
level=libxml2.XML_ERR_WARNING,
|
|
file=None,
|
|
line=0)
|
|
|
|
def test2(self):
|
|
"""Test a well-formedness error: we get the last error only"""
|
|
s = "<x>\n<a>\n</x>"
|
|
self.failUnlessXmlError(libxml2.readMemory,
|
|
(s,len(s),"dummy.xml",None,0),
|
|
libxml2.treeError,
|
|
domain=libxml2.XML_FROM_PARSER,
|
|
code=libxml2.XML_ERR_TAG_NOT_FINISHED,
|
|
message='Premature end of data in tag x line 1\n',
|
|
level=libxml2.XML_ERR_FATAL,
|
|
file='dummy.xml',
|
|
line=3)
|
|
|
|
if __name__ == "__main__":
|
|
test = TestCase()
|
|
test.setUp()
|
|
test.test1()
|
|
test.test2()
|
|
test.tearDown()
|