1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Workerimport setup_test 3*7c568831SAndroid Build Coastguard Workerimport libxml2 4*7c568831SAndroid Build Coastguard Workerimport sys 5*7c568831SAndroid Build Coastguard Worker 6*7c568831SAndroid Build Coastguard Worker# Memory debug specific 7*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1) 8*7c568831SAndroid Build Coastguard Worker 9*7c568831SAndroid Build Coastguard Workerschema="""<?xml version="1.0"?> 10*7c568831SAndroid Build Coastguard Worker<element name="foo" 11*7c568831SAndroid Build Coastguard Worker xmlns="http://relaxng.org/ns/structure/1.0" 12*7c568831SAndroid Build Coastguard Worker xmlns:a="http://relaxng.org/ns/annotation/1.0" 13*7c568831SAndroid Build Coastguard Worker xmlns:ex1="http://www.example.com/n1" 14*7c568831SAndroid Build Coastguard Worker xmlns:ex2="http://www.example.com/n2"> 15*7c568831SAndroid Build Coastguard Worker <a:documentation>A foo element.</a:documentation> 16*7c568831SAndroid Build Coastguard Worker <element name="ex1:bar1"> 17*7c568831SAndroid Build Coastguard Worker <empty/> 18*7c568831SAndroid Build Coastguard Worker </element> 19*7c568831SAndroid Build Coastguard Worker <element name="ex2:bar2"> 20*7c568831SAndroid Build Coastguard Worker <empty/> 21*7c568831SAndroid Build Coastguard Worker </element> 22*7c568831SAndroid Build Coastguard Worker</element> 23*7c568831SAndroid Build Coastguard Worker""" 24*7c568831SAndroid Build Coastguard Workerinstance="""<?xml version="1.0"?> 25*7c568831SAndroid Build Coastguard Worker<foo><pre1:bar1 xmlns:pre1="http://www.example.com/n1"/><pre2:bar2 xmlns:pre2="http://www.example.com/n2"/></foo>""" 26*7c568831SAndroid Build Coastguard Worker 27*7c568831SAndroid Build Coastguard Workerrngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema)) 28*7c568831SAndroid Build Coastguard Workerrngs = rngp.relaxNGParse() 29*7c568831SAndroid Build Coastguard Workerctxt = rngs.relaxNGNewValidCtxt() 30*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(instance) 31*7c568831SAndroid Build Coastguard Workerret = doc.relaxNGValidateDoc(ctxt) 32*7c568831SAndroid Build Coastguard Workerif ret != 0: 33*7c568831SAndroid Build Coastguard Worker print("error doing RelaxNG validation") 34*7c568831SAndroid Build Coastguard Worker sys.exit(1) 35*7c568831SAndroid Build Coastguard Worker 36*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 37*7c568831SAndroid Build Coastguard Workerdel rngp 38*7c568831SAndroid Build Coastguard Workerdel rngs 39*7c568831SAndroid Build Coastguard Workerdel ctxt 40*7c568831SAndroid Build Coastguard Workerlibxml2.relaxNGCleanupTypes() 41*7c568831SAndroid Build Coastguard Worker 42*7c568831SAndroid Build Coastguard Worker# Memory debug specific 43*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 44*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 45*7c568831SAndroid Build Coastguard Worker print("OK") 46*7c568831SAndroid Build Coastguard Workerelse: 47*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 48*7c568831SAndroid Build Coastguard Worker 49