| | |
| | |
| | |
| | |
| | import sys |
| | import setup_test |
| | import libxml2 |
| | try: |
| | import StringIO |
| | str_io = StringIO.StringIO |
| | except: |
| | import io |
| | str_io = io.StringIO |
| |
|
| | schema="""<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" |
| | datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> |
| | <oneOrMore> |
| | <element name="label"> |
| | <text/> |
| | </element> |
| | <optional> |
| | <element name="opt"> |
| | <empty/> |
| | </element> |
| | </optional> |
| | <element name="item"> |
| | <data type="byte"/> |
| | </element> |
| | </oneOrMore> |
| | </element> |
| | """ |
| | |
| | libxml2.debugMemory(1) |
| |
|
| | |
| | |
| | |
| | rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema)) |
| | rngs = rngp.relaxNGParse() |
| | del rngp |
| |
|
| | |
| | |
| | |
| | docstr="""<foo> |
| | <label>some text</label> |
| | <item>100</item> |
| | </foo>""" |
| |
|
| | f = str_io(docstr) |
| | input = libxml2.inputBuffer(f) |
| | reader = input.newTextReader("correct") |
| | reader.RelaxNGSetSchema(rngs) |
| | ret = reader.Read() |
| | while ret == 1: |
| | ret = reader.Read() |
| |
|
| | if ret != 0: |
| | print("Error parsing the document") |
| | sys.exit(1) |
| |
|
| | if reader.IsValid() != 1: |
| | print("Document failed to validate") |
| | sys.exit(1) |
| |
|
| | |
| | |
| | |
| | docstr="""<foo> |
| | <label>some text</label> |
| | <item>1000</item> |
| | </foo>""" |
| |
|
| | err="" |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | expect="""Type byte doesn't allow value '1000' |
| | Error validating datatype byte |
| | Element item failed to validate content |
| | """ |
| |
|
| | def callback(ctx, str): |
| | global err |
| | err = err + "%s" % (str) |
| | libxml2.registerErrorHandler(callback, "") |
| |
|
| | f = str_io(docstr) |
| | input = libxml2.inputBuffer(f) |
| | reader = input.newTextReader("error") |
| | reader.RelaxNGSetSchema(rngs) |
| | ret = reader.Read() |
| | while ret == 1: |
| | ret = reader.Read() |
| |
|
| | if ret != 0: |
| | print("Error parsing the document") |
| | sys.exit(1) |
| |
|
| | if reader.IsValid() != 0: |
| | print("Document failed to detect the validation error") |
| | sys.exit(1) |
| |
|
| | if err != expect: |
| | print("Did not get the expected error message:") |
| | print(err) |
| | sys.exit(1) |
| |
|
| | |
| | |
| | |
| | del f |
| | del input |
| | del reader |
| | del rngs |
| | libxml2.relaxNGCleanupTypes() |
| |
|
| | |
| | libxml2.cleanupParser() |
| | if libxml2.debugMemory(1) == 0: |
| | print("OK") |
| | else: |
| | print("Memory leak %d bytes" % (libxml2.debugMemory(1))) |
| |
|