1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Workerimport sys, unittest 3*7c568831SAndroid Build Coastguard Worker 4*7c568831SAndroid Build Coastguard Workerimport setup_test 5*7c568831SAndroid Build Coastguard Workerimport libxml2 6*7c568831SAndroid Build Coastguard Worker 7*7c568831SAndroid Build Coastguard Workerclass TestCase(unittest.TestCase): 8*7c568831SAndroid Build Coastguard Worker 9*7c568831SAndroid Build Coastguard Worker def runTest(self): 10*7c568831SAndroid Build Coastguard Worker self.test1() 11*7c568831SAndroid Build Coastguard Worker self.test2() 12*7c568831SAndroid Build Coastguard Worker 13*7c568831SAndroid Build Coastguard Worker def setUp(self): 14*7c568831SAndroid Build Coastguard Worker libxml2.debugMemory(1) 15*7c568831SAndroid Build Coastguard Worker 16*7c568831SAndroid Build Coastguard Worker def tearDown(self): 17*7c568831SAndroid Build Coastguard Worker libxml2.cleanupParser() 18*7c568831SAndroid Build Coastguard Worker if libxml2.debugMemory(1) != 0: 19*7c568831SAndroid Build Coastguard Worker self.fail("Memory leak %d bytes" % (libxml2.debugMemory(1),)) 20*7c568831SAndroid Build Coastguard Worker else: 21*7c568831SAndroid Build Coastguard Worker print("OK") 22*7c568831SAndroid Build Coastguard Worker 23*7c568831SAndroid Build Coastguard Worker def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line): 24*7c568831SAndroid Build Coastguard Worker """Run function f, with arguments args and expect an exception exc; 25*7c568831SAndroid Build Coastguard Worker when the exception is raised, check the libxml2.lastError for 26*7c568831SAndroid Build Coastguard Worker expected values.""" 27*7c568831SAndroid Build Coastguard Worker # disable the default error handler 28*7c568831SAndroid Build Coastguard Worker def noerr(ctx, str): 29*7c568831SAndroid Build Coastguard Worker pass 30*7c568831SAndroid Build Coastguard Worker # None is not acceptable as function. 31*7c568831SAndroid Build Coastguard Worker libxml2.registerErrorHandler(noerr,None) 32*7c568831SAndroid Build Coastguard Worker try: 33*7c568831SAndroid Build Coastguard Worker f(*args) 34*7c568831SAndroid Build Coastguard Worker except exc: 35*7c568831SAndroid Build Coastguard Worker e = libxml2.lastError() 36*7c568831SAndroid Build Coastguard Worker if e is None: 37*7c568831SAndroid Build Coastguard Worker self.fail("lastError not set") 38*7c568831SAndroid Build Coastguard Worker if 0: 39*7c568831SAndroid Build Coastguard Worker print("domain = ",e.domain()) 40*7c568831SAndroid Build Coastguard Worker print("code = ",e.code()) 41*7c568831SAndroid Build Coastguard Worker print("message =",repr(e.message())) 42*7c568831SAndroid Build Coastguard Worker print("level =",e.level()) 43*7c568831SAndroid Build Coastguard Worker print("file =",e.file()) 44*7c568831SAndroid Build Coastguard Worker print("line =",e.line()) 45*7c568831SAndroid Build Coastguard Worker print() 46*7c568831SAndroid Build Coastguard Worker self.assertEqual(domain,e.domain()) 47*7c568831SAndroid Build Coastguard Worker self.assertEqual(code,e.code()) 48*7c568831SAndroid Build Coastguard Worker self.assertEqual(message,e.message()) 49*7c568831SAndroid Build Coastguard Worker self.assertEqual(level,e.level()) 50*7c568831SAndroid Build Coastguard Worker self.assertEqual(file,e.file()) 51*7c568831SAndroid Build Coastguard Worker self.assertEqual(line,e.line()) 52*7c568831SAndroid Build Coastguard Worker else: 53*7c568831SAndroid Build Coastguard Worker self.fail("exception %s should have been raised" % exc) 54*7c568831SAndroid Build Coastguard Worker 55*7c568831SAndroid Build Coastguard Worker def test1(self): 56*7c568831SAndroid Build Coastguard Worker """Test readFile with a file that does not exist""" 57*7c568831SAndroid Build Coastguard Worker self.failUnlessXmlError(libxml2.readFile, 58*7c568831SAndroid Build Coastguard Worker ("dummy.xml",None,0), 59*7c568831SAndroid Build Coastguard Worker libxml2.treeError, 60*7c568831SAndroid Build Coastguard Worker domain=libxml2.XML_FROM_IO, 61*7c568831SAndroid Build Coastguard Worker code=libxml2.XML_IO_ENOENT, 62*7c568831SAndroid Build Coastguard Worker message='failed to load "dummy.xml": No such file or directory\n', 63*7c568831SAndroid Build Coastguard Worker level=libxml2.XML_ERR_WARNING, 64*7c568831SAndroid Build Coastguard Worker file=None, 65*7c568831SAndroid Build Coastguard Worker line=0) 66*7c568831SAndroid Build Coastguard Worker 67*7c568831SAndroid Build Coastguard Worker def test2(self): 68*7c568831SAndroid Build Coastguard Worker """Test a well-formedness error: we get the last error only""" 69*7c568831SAndroid Build Coastguard Worker s = "<x>\n<a>\n</x>" 70*7c568831SAndroid Build Coastguard Worker self.failUnlessXmlError(libxml2.readMemory, 71*7c568831SAndroid Build Coastguard Worker (s,len(s),"dummy.xml",None,0), 72*7c568831SAndroid Build Coastguard Worker libxml2.treeError, 73*7c568831SAndroid Build Coastguard Worker domain=libxml2.XML_FROM_PARSER, 74*7c568831SAndroid Build Coastguard Worker code=libxml2.XML_ERR_TAG_NAME_MISMATCH, 75*7c568831SAndroid Build Coastguard Worker message='Opening and ending tag mismatch: a line 2 and x\n', 76*7c568831SAndroid Build Coastguard Worker level=libxml2.XML_ERR_FATAL, 77*7c568831SAndroid Build Coastguard Worker file='dummy.xml', 78*7c568831SAndroid Build Coastguard Worker line=3) 79*7c568831SAndroid Build Coastguard Worker 80*7c568831SAndroid Build Coastguard Workerif __name__ == "__main__": 81*7c568831SAndroid Build Coastguard Worker test = TestCase() 82*7c568831SAndroid Build Coastguard Worker test.setUp() 83*7c568831SAndroid Build Coastguard Worker test.test1() 84*7c568831SAndroid Build Coastguard Worker test.test2() 85*7c568831SAndroid Build Coastguard Worker test.tearDown() 86