aboutsummaryrefslogtreecommitdiff
path: root/libxml2-2.9.10/python/tests/tstLastError.py
blob: 81d0acc44a5348a120c657c2864634451dc18122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/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
        libxml2.registerErrorHandler(None,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.failUnlessEqual(domain,e.domain())
            self.failUnlessEqual(code,e.code())
            self.failUnlessEqual(message,e.message())
            self.failUnlessEqual(level,e.level())
            self.failUnlessEqual(file,e.file())
            self.failUnlessEqual(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_LTSLASH_REQUIRED,
                        message='EndTag: \'</\' not found\n',
                        level=libxml2.XML_ERR_FATAL,
                        file='dummy.xml',
                        line=3)

if __name__ == "__main__":
    test = TestCase()
    test.setUp()
    test.test1()
    test.test2()
    test.tearDown()