Blame python/tests/reader6.py

Packit 423ecb
#!/usr/bin/python -u
Packit 423ecb
#
Packit 423ecb
# this tests the entities substitutions with the XmlTextReader interface
Packit 423ecb
#
Packit 423ecb
import sys
Packit 423ecb
import libxml2
Packit 423ecb
try:
Packit 423ecb
    import StringIO
Packit 423ecb
    str_io = StringIO.StringIO
Packit 423ecb
except:
Packit 423ecb
    import io
Packit 423ecb
    str_io = io.StringIO
Packit 423ecb
Packit 423ecb
schema="""
Packit 423ecb
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
Packit 423ecb
  <oneOrMore>
Packit 423ecb
    <element name="label">
Packit 423ecb
      <text/>
Packit 423ecb
    </element>
Packit 423ecb
    <optional>
Packit 423ecb
      <element name="opt">
Packit 423ecb
        <empty/>
Packit 423ecb
      </element>
Packit 423ecb
    </optional>
Packit 423ecb
    <element name="item">
Packit 423ecb
      <data type="byte"/>
Packit 423ecb
    </element>
Packit 423ecb
  </oneOrMore>
Packit 423ecb
</element>
Packit 423ecb
"""
Packit 423ecb
# Memory debug specific
Packit 423ecb
libxml2.debugMemory(1)
Packit 423ecb
Packit 423ecb
#
Packit 423ecb
# Parse the Relax NG Schemas
Packit 423ecb
# 
Packit 423ecb
rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
Packit 423ecb
rngs = rngp.relaxNGParse()
Packit 423ecb
del rngp
Packit 423ecb
Packit 423ecb
#
Packit 423ecb
# Parse and validate the correct document
Packit 423ecb
#
Packit 423ecb
docstr="""<foo>
Packit 423ecb
<label>some text</label>
Packit 423ecb
<item>100</item>
Packit 423ecb
</foo>"""
Packit 423ecb
Packit 423ecb
f = str_io(docstr)
Packit 423ecb
input = libxml2.inputBuffer(f)
Packit 423ecb
reader = input.newTextReader("correct")
Packit 423ecb
reader.RelaxNGSetSchema(rngs)
Packit 423ecb
ret = reader.Read()
Packit 423ecb
while ret == 1:
Packit 423ecb
    ret = reader.Read()
Packit 423ecb
Packit 423ecb
if ret != 0:
Packit 423ecb
    print("Error parsing the document")
Packit 423ecb
    sys.exit(1)
Packit 423ecb
Packit 423ecb
if reader.IsValid() != 1:
Packit 423ecb
    print("Document failed to validate")
Packit 423ecb
    sys.exit(1)
Packit 423ecb
Packit 423ecb
#
Packit 423ecb
# Parse and validate the incorrect document
Packit 423ecb
#
Packit 423ecb
docstr="""<foo>
Packit 423ecb
<label>some text</label>
Packit 423ecb
<item>1000</item>
Packit 423ecb
</foo>"""
Packit 423ecb
Packit 423ecb
err=""
Packit 423ecb
# RNG errors are not as good as before , TODO
Packit 423ecb
#expect="""RNG validity error: file error line 3 element text
Packit 423ecb
#Type byte doesn't allow value '1000'
Packit 423ecb
#RNG validity error: file error line 3 element text
Packit 423ecb
#Error validating datatype byte
Packit 423ecb
#RNG validity error: file error line 3 element text
Packit 423ecb
#Element item failed to validate content
Packit 423ecb
#"""
Packit 423ecb
expect="""Type byte doesn't allow value '1000'
Packit 423ecb
Error validating datatype byte
Packit 423ecb
Element item failed to validate content
Packit 423ecb
"""
Packit 423ecb
Packit 423ecb
def callback(ctx, str):
Packit 423ecb
    global err
Packit 423ecb
    err = err + "%s" % (str)
Packit 423ecb
libxml2.registerErrorHandler(callback, "")
Packit 423ecb
Packit 423ecb
f = str_io(docstr)
Packit 423ecb
input = libxml2.inputBuffer(f)
Packit 423ecb
reader = input.newTextReader("error")
Packit 423ecb
reader.RelaxNGSetSchema(rngs)
Packit 423ecb
ret = reader.Read()
Packit 423ecb
while ret == 1:
Packit 423ecb
    ret = reader.Read()
Packit 423ecb
Packit 423ecb
if ret != 0:
Packit 423ecb
    print("Error parsing the document")
Packit 423ecb
    sys.exit(1)
Packit 423ecb
Packit 423ecb
if reader.IsValid() != 0:
Packit 423ecb
    print("Document failed to detect the validation error")
Packit 423ecb
    sys.exit(1)
Packit 423ecb
Packit 423ecb
if err != expect:
Packit 423ecb
    print("Did not get the expected error message:")
Packit 423ecb
    print(err)
Packit 423ecb
    sys.exit(1)
Packit 423ecb
Packit 423ecb
#
Packit 423ecb
# cleanup
Packit 423ecb
#
Packit 423ecb
del f
Packit 423ecb
del input
Packit 423ecb
del reader
Packit 423ecb
del rngs
Packit 423ecb
libxml2.relaxNGCleanupTypes()
Packit 423ecb
Packit 423ecb
# Memory debug specific
Packit 423ecb
libxml2.cleanupParser()
Packit 423ecb
if libxml2.debugMemory(1) == 0:
Packit 423ecb
    print("OK")
Packit 423ecb
else:
Packit 423ecb
    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
Packit 423ecb
    libxml2.dumpMemory()