Return to validRNG.py CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / python / tests |
1.1 ! misho 1: #!/usr/bin/python -u ! 2: import libxml2 ! 3: import sys ! 4: ! 5: ARG = 'test string' ! 6: ! 7: class ErrorHandler: ! 8: ! 9: def __init__(self): ! 10: self.errors = [] ! 11: ! 12: def handler(self, msg, data): ! 13: if data != ARG: ! 14: raise Exception, "Error handler did not receive correct argument" ! 15: self.errors.append(msg) ! 16: ! 17: # Memory debug specific ! 18: libxml2.debugMemory(1) ! 19: ! 20: schema="""<?xml version="1.0"?> ! 21: <element name="foo" ! 22: xmlns="http://relaxng.org/ns/structure/1.0" ! 23: xmlns:a="http://relaxng.org/ns/annotation/1.0" ! 24: xmlns:ex1="http://www.example.com/n1" ! 25: xmlns:ex2="http://www.example.com/n2"> ! 26: <a:documentation>A foo element.</a:documentation> ! 27: <element name="ex1:bar1"> ! 28: <empty/> ! 29: </element> ! 30: <element name="ex2:bar2"> ! 31: <empty/> ! 32: </element> ! 33: </element> ! 34: """ ! 35: ! 36: valid="""<?xml version="1.0"?> ! 37: <foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1"/><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>""" ! 38: ! 39: invalid="""<?xml version="1.0"?> ! 40: <foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1">bad</pre1:bar1><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>""" ! 41: ! 42: rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema)) ! 43: rngs = rngp.relaxNGParse() ! 44: ctxt = rngs.relaxNGNewValidCtxt() ! 45: e = ErrorHandler() ! 46: ctxt.setValidityErrorHandler(e.handler, e.handler, ARG) ! 47: ! 48: # Test valid document ! 49: doc = libxml2.parseDoc(valid) ! 50: ret = doc.relaxNGValidateDoc(ctxt) ! 51: if ret != 0 or e.errors: ! 52: print "error doing RelaxNG validation" ! 53: sys.exit(1) ! 54: doc.freeDoc() ! 55: ! 56: # Test invalid document ! 57: doc = libxml2.parseDoc(invalid) ! 58: ret = doc.relaxNGValidateDoc(ctxt) ! 59: if ret == 0 or not e.errors: ! 60: print "Error: document supposed to be RelaxNG invalid" ! 61: sys.exit(1) ! 62: doc.freeDoc() ! 63: ! 64: del rngp ! 65: del rngs ! 66: del ctxt ! 67: libxml2.relaxNGCleanupTypes() ! 68: ! 69: # Memory debug specific ! 70: libxml2.cleanupParser() ! 71: if libxml2.debugMemory(1) == 0: ! 72: print "OK" ! 73: else: ! 74: print "Memory leak %d bytes" % (libxml2.debugMemory(1)) ! 75: libxml2.dumpMemory() ! 76: