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 WorkerARG = 'test string' 7*7c568831SAndroid Build Coastguard Worker 8*7c568831SAndroid Build Coastguard Workerclass ErrorHandler: 9*7c568831SAndroid Build Coastguard Worker 10*7c568831SAndroid Build Coastguard Worker def __init__(self): 11*7c568831SAndroid Build Coastguard Worker self.errors = [] 12*7c568831SAndroid Build Coastguard Worker 13*7c568831SAndroid Build Coastguard Worker def handler(self, msg, data): 14*7c568831SAndroid Build Coastguard Worker if data != ARG: 15*7c568831SAndroid Build Coastguard Worker raise Exception("Error handler did not receive correct argument") 16*7c568831SAndroid Build Coastguard Worker self.errors.append(msg) 17*7c568831SAndroid Build Coastguard Worker 18*7c568831SAndroid Build Coastguard Worker# Memory debug specific 19*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1) 20*7c568831SAndroid Build Coastguard Worker 21*7c568831SAndroid Build Coastguard Workerschema="""<?xml version="1.0" encoding="iso-8859-1"?> 22*7c568831SAndroid Build Coastguard Worker<schema xmlns = "http://www.w3.org/2001/XMLSchema"> 23*7c568831SAndroid Build Coastguard Worker <element name = "Customer"> 24*7c568831SAndroid Build Coastguard Worker <complexType> 25*7c568831SAndroid Build Coastguard Worker <sequence> 26*7c568831SAndroid Build Coastguard Worker <element name = "FirstName" type = "string" /> 27*7c568831SAndroid Build Coastguard Worker <element name = "MiddleInitial" type = "string" /> 28*7c568831SAndroid Build Coastguard Worker <element name = "LastName" type = "string" /> 29*7c568831SAndroid Build Coastguard Worker </sequence> 30*7c568831SAndroid Build Coastguard Worker <attribute name = "customerID" type = "integer" /> 31*7c568831SAndroid Build Coastguard Worker </complexType> 32*7c568831SAndroid Build Coastguard Worker </element> 33*7c568831SAndroid Build Coastguard Worker</schema>""" 34*7c568831SAndroid Build Coastguard Worker 35*7c568831SAndroid Build Coastguard Workervalid="""<?xml version="1.0" encoding="iso-8859-1"?> 36*7c568831SAndroid Build Coastguard Worker<Customer customerID = "24332"> 37*7c568831SAndroid Build Coastguard Worker <FirstName>Raymond</FirstName> 38*7c568831SAndroid Build Coastguard Worker <MiddleInitial>G</MiddleInitial> 39*7c568831SAndroid Build Coastguard Worker <LastName>Bayliss</LastName> 40*7c568831SAndroid Build Coastguard Worker</Customer> 41*7c568831SAndroid Build Coastguard Worker""" 42*7c568831SAndroid Build Coastguard Worker 43*7c568831SAndroid Build Coastguard Workerinvalid="""<?xml version="1.0" encoding="iso-8859-1"?> 44*7c568831SAndroid Build Coastguard Worker<Customer customerID = "24332"> 45*7c568831SAndroid Build Coastguard Worker <MiddleInitial>G</MiddleInitial> 46*7c568831SAndroid Build Coastguard Worker <LastName>Bayliss</LastName> 47*7c568831SAndroid Build Coastguard Worker</Customer> 48*7c568831SAndroid Build Coastguard Worker""" 49*7c568831SAndroid Build Coastguard Worker 50*7c568831SAndroid Build Coastguard Workere = ErrorHandler() 51*7c568831SAndroid Build Coastguard Workerctxt_parser = libxml2.schemaNewMemParserCtxt(schema, len(schema)) 52*7c568831SAndroid Build Coastguard Workerctxt_schema = ctxt_parser.schemaParse() 53*7c568831SAndroid Build Coastguard Workerctxt_valid = ctxt_schema.schemaNewValidCtxt() 54*7c568831SAndroid Build Coastguard Workerctxt_valid.setValidityErrorHandler(e.handler, e.handler, ARG) 55*7c568831SAndroid Build Coastguard Worker 56*7c568831SAndroid Build Coastguard Worker# Test valid document 57*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(valid) 58*7c568831SAndroid Build Coastguard Workerret = doc.schemaValidateDoc(ctxt_valid) 59*7c568831SAndroid Build Coastguard Workerif ret != 0 or e.errors: 60*7c568831SAndroid Build Coastguard Worker print("error doing schema validation") 61*7c568831SAndroid Build Coastguard Worker sys.exit(1) 62*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 63*7c568831SAndroid Build Coastguard Worker 64*7c568831SAndroid Build Coastguard Worker# Test invalid document 65*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc(invalid) 66*7c568831SAndroid Build Coastguard Workerret = doc.schemaValidateDoc(ctxt_valid) 67*7c568831SAndroid Build Coastguard Workerif ret == 0 or not e.errors: 68*7c568831SAndroid Build Coastguard Worker print("Error: document supposer to be schema invalid") 69*7c568831SAndroid Build Coastguard Worker sys.exit(1) 70*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 71*7c568831SAndroid Build Coastguard Worker 72*7c568831SAndroid Build Coastguard Workerdel ctxt_parser 73*7c568831SAndroid Build Coastguard Workerdel ctxt_schema 74*7c568831SAndroid Build Coastguard Workerdel ctxt_valid 75*7c568831SAndroid Build Coastguard Workerlibxml2.schemaCleanupTypes() 76*7c568831SAndroid Build Coastguard Worker 77*7c568831SAndroid Build Coastguard Worker# Memory debug specific 78*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 79*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0: 80*7c568831SAndroid Build Coastguard Worker print("OK") 81*7c568831SAndroid Build Coastguard Workerelse: 82*7c568831SAndroid Build Coastguard Worker print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 83*7c568831SAndroid Build Coastguard Worker 84