1 #!/usr/bin/env python3
2 # -*- coding: ISO-8859-1 -*-
3 import sys
4 import setup_test
5 import libxml2
6
7 # Memory debug specific
8 libxml2.debugMemory(1)
9
10 ctxt = None
11
12 class ESC[4;38;5;81mcallback:
13 def __init__(self, startd, starte, ende, delta, endd):
14 self.startd = startd
15 self.starte = starte
16 self.ende = ende
17 self.endd = endd
18 self.delta = delta
19 self.count = 0
20
21 def startDocument(self):
22 global ctxt
23 if ctxt.byteConsumed() != self.startd:
24 print("document start at wrong index: %d expecting %d\n" % (
25 ctxt.byteConsumed(), self.startd))
26 sys.exit(1)
27
28 def endDocument(self):
29 global ctxt
30 expect = self.ende + self.delta * (self.count - 1) + self.endd
31 if ctxt.byteConsumed() != expect:
32 print("document end at wrong index: %d expecting %d\n" % (
33 ctxt.byteConsumed(), expect))
34 sys.exit(1)
35
36 def startElement(self, tag, attrs):
37 global ctxt
38 if tag == "bar1":
39 expect = self.starte + self.delta * self.count
40 if ctxt.byteConsumed() != expect:
41 print("element start at wrong index: %d expecting %d\n" % (
42 ctxt.byteConsumed(), expect))
43 sys.exit(1)
44
45
46 def endElement(self, tag):
47 global ctxt
48 if tag == "bar1":
49 expect = self.ende + self.delta * self.count
50 if ctxt.byteConsumed() != expect:
51 print("element end at wrong index: %d expecting %d\n" % (
52 ctxt.byteConsumed(), expect))
53 sys.exit(1)
54 self.count = self.count + 1
55
56 def characters(self, data):
57 pass
58
59 #
60 # First run a pure UTF-8 test
61 #
62 handler = callback(0, 13, 27, 198, 183)
63 ctxt = libxml2.createPushParser(handler, "<foo>\n", 6, "test.xml")
64 chunk = """ <bar1>chars1</bar1>
65 <bar2>chars2</bar2>
66 <bar3>chars3</bar3>
67 <bar4>chars4</bar4>
68 <bar5>chars5</bar5>
69 <bar6><s6</bar6>
70 <bar7>chars7</bar7>
71 <bar8>&8</bar8>
72 <bar9>chars9</bar9>
73 """
74 i = 0
75 while i < 10000:
76 ctxt.parseChunk(chunk, len(chunk), 0)
77 i = i + 1
78 chunk = "</foo>"
79 ctxt.parseChunk(chunk, len(chunk), 1)
80 ctxt=None
81
82 #
83 # Then run a test relying on ISO-Latin-1
84 #
85 handler = callback(43, 57, 71, 198, 183)
86 chunk="""<?xml version="1.0" encoding="ISO-8859-1"?>
87 <foo>
88 """
89 ctxt = libxml2.createPushParser(handler, chunk, len(chunk), "test.xml")
90 chunk = """ <bar1>chars1</bar1>
91 <bar2>chars2</bar2>
92 <bar3>chars3</bar3>
93 <bar4>ch�rs4</bar4>
94 <bar5>chars5</bar5>
95 <bar6><s6</bar6>
96 <bar7>chars7</bar7>
97 <bar8>&8</bar8>
98 <bar9>tr�s 9</bar9>
99 """
100 i = 0
101 while i < 10000:
102 ctxt.parseChunk(chunk, len(chunk), 0)
103 i = i + 1
104 chunk = "</foo>"
105 ctxt.parseChunk(chunk, len(chunk), 1)
106 ctxt=None
107
108 # Memory debug specific
109 libxml2.cleanupParser()
110 if libxml2.debugMemory(1) == 0:
111 print("OK")
112 else:
113 print("Memory leak %d bytes" % (libxml2.debugMemory(1)))