Annotation of embedaddon/libxml2/python/tests/reader6.py, revision 1.1.1.1
1.1 misho 1: #!/usr/bin/python -u
2: #
3: # this tests the entities substitutions with the XmlTextReader interface
4: #
5: import sys
6: import StringIO
7: import libxml2
8:
9: schema="""<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
10: datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
11: <oneOrMore>
12: <element name="label">
13: <text/>
14: </element>
15: <optional>
16: <element name="opt">
17: <empty/>
18: </element>
19: </optional>
20: <element name="item">
21: <data type="byte"/>
22: </element>
23: </oneOrMore>
24: </element>
25: """
26: # Memory debug specific
27: libxml2.debugMemory(1)
28:
29: #
30: # Parse the Relax NG Schemas
31: #
32: rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
33: rngs = rngp.relaxNGParse()
34: del rngp
35:
36: #
37: # Parse and validate the correct document
38: #
39: docstr="""<foo>
40: <label>some text</label>
41: <item>100</item>
42: </foo>"""
43:
44: f = StringIO.StringIO(docstr)
45: input = libxml2.inputBuffer(f)
46: reader = input.newTextReader("correct")
47: reader.RelaxNGSetSchema(rngs)
48: ret = reader.Read()
49: while ret == 1:
50: ret = reader.Read()
51:
52: if ret != 0:
53: print "Error parsing the document"
54: sys.exit(1)
55:
56: if reader.IsValid() != 1:
57: print "Document failed to validate"
58: sys.exit(1)
59:
60: #
61: # Parse and validate the incorrect document
62: #
63: docstr="""<foo>
64: <label>some text</label>
65: <item>1000</item>
66: </foo>"""
67:
68: err=""
69: # RNG errors are not as good as before , TODO
70: #expect="""RNG validity error: file error line 3 element text
71: #Type byte doesn't allow value '1000'
72: #RNG validity error: file error line 3 element text
73: #Error validating datatype byte
74: #RNG validity error: file error line 3 element text
75: #Element item failed to validate content
76: #"""
77: expect="""Type byte doesn't allow value '1000'
78: Error validating datatype byte
79: Element item failed to validate content
80: """
81:
82: def callback(ctx, str):
83: global err
84: err = err + "%s" % (str)
85: libxml2.registerErrorHandler(callback, "")
86:
87: f = StringIO.StringIO(docstr)
88: input = libxml2.inputBuffer(f)
89: reader = input.newTextReader("error")
90: reader.RelaxNGSetSchema(rngs)
91: ret = reader.Read()
92: while ret == 1:
93: ret = reader.Read()
94:
95: if ret != 0:
96: print "Error parsing the document"
97: sys.exit(1)
98:
99: if reader.IsValid() != 0:
100: print "Document failed to detect the validation error"
101: sys.exit(1)
102:
103: if err != expect:
104: print "Did not get the expected error message:"
105: print err
106: sys.exit(1)
107:
108: #
109: # cleanup
110: #
111: del f
112: del input
113: del reader
114: del rngs
115: libxml2.relaxNGCleanupTypes()
116:
117: # Memory debug specific
118: libxml2.cleanupParser()
119: if libxml2.debugMemory(1) == 0:
120: print "OK"
121: else:
122: print "Memory leak %d bytes" % (libxml2.debugMemory(1))
123: libxml2.dumpMemory()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>