Annotation of embedaddon/libxml2/python/tests/reader6.py, revision 1.1.1.2

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 libxml2
1.1.1.2 ! misho       7: try:
        !             8:     import StringIO
        !             9:     str_io = StringIO.StringIO
        !            10: except:
        !            11:     import io
        !            12:     str_io = io.StringIO
1.1       misho      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: 
1.1.1.2 ! misho      49: f = str_io(docstr)
1.1       misho      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:
1.1.1.2 ! misho      58:     print("Error parsing the document")
1.1       misho      59:     sys.exit(1)
                     60: 
                     61: if reader.IsValid() != 1:
1.1.1.2 ! misho      62:     print("Document failed to validate")
1.1       misho      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: 
1.1.1.2 ! misho      92: f = str_io(docstr)
1.1       misho      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:
1.1.1.2 ! misho     101:     print("Error parsing the document")
1.1       misho     102:     sys.exit(1)
                    103: 
                    104: if reader.IsValid() != 0:
1.1.1.2 ! misho     105:     print("Document failed to detect the validation error")
1.1       misho     106:     sys.exit(1)
                    107: 
                    108: if err != expect:
1.1.1.2 ! misho     109:     print("Did not get the expected error message:")
        !           110:     print(err)
1.1       misho     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:
1.1.1.2 ! misho     125:     print("OK")
1.1       misho     126: else:
1.1.1.2 ! misho     127:     print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
1.1       misho     128:     libxml2.dumpMemory()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>