2 import string, sys, time
4 from _thread import get_ident
6 from thread import get_ident
7 from threading import Thread, Lock
21 def handler(self,ctx,str):
23 self.errors.append(str)
26 def getLineNumbersDefault():
27 old = libxml2.lineNumbersDefault(0)
28 libxml2.lineNumbersDefault(old)
31 def test(expectedLineNumbersDefault):
34 # check a per thread-global
35 if expectedLineNumbersDefault != getLineNumbersDefault():
37 print("FAILED to obtain correct value for " \
38 "lineNumbersDefault in thread %d" % get_ident())
39 # check ther global error handler
40 # (which is NOT per-thread in the python bindings)
42 doc = libxml2.parseFile("bad.xml")
48 # global error handler
50 libxml2.registerErrorHandler(eh.handler,"")
52 # set on the main thread only
53 libxml2.lineNumbersDefault(1)
57 print("FAILED: should have obtained errors")
61 for i in range(THREADS_COUNT):
62 # expect 0 for lineNumbersDefault because
63 # the new value has been set on the main thread only
64 ts.append(Thread(target=test,args=(0,)))
70 if len(eh.errors) != ec+THREADS_COUNT*ec:
71 print("FAILED: did not obtain the correct number of errors")
74 # set lineNumbersDefault for future new threads
75 libxml2.thrDefLineNumbersDefaultValue(1)
77 for i in range(THREADS_COUNT):
78 # expect 1 for lineNumbersDefault
79 ts.append(Thread(target=test,args=(1,)))
85 if len(eh.errors) != ec+THREADS_COUNT*ec*2:
86 print("FAILED: did not obtain the correct number of errors")
93 # Memory debug specific
94 libxml2.cleanupParser()
95 if libxml2.debugMemory(1) == 0:
98 print("Memory leak %d bytes" % (libxml2.debugMemory(1)))