xref: /aosp_15_r20/external/libxml2/python/tests/tstLastError.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
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