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