Home | History | Annotate | Download | only in tests
      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" encoding="iso-8859-1"?>
     21 <schema xmlns = "http://www.w3.org/2001/XMLSchema">
     22 	<element name = "Customer">
     23 		<complexType>
     24 			<sequence>
     25 				<element name = "FirstName" type = "string" />
     26 				<element name = "MiddleInitial" type = "string" />
     27 				<element name = "LastName" type = "string" />
     28 			</sequence>
     29 			<attribute name = "customerID" type = "integer" />
     30 		</complexType>
     31 	</element>
     32 </schema>"""
     33 
     34 valid="""<?xml version="1.0" encoding="iso-8859-1"?>
     35 <Customer customerID = "24332">
     36 	<FirstName>Raymond</FirstName>
     37 	<MiddleInitial>G</MiddleInitial>
     38 	<LastName>Bayliss</LastName>
     39 </Customer>	
     40 """
     41 
     42 invalid="""<?xml version="1.0" encoding="iso-8859-1"?>
     43 <Customer customerID = "24332">
     44 	<MiddleInitial>G</MiddleInitial>
     45 	<LastName>Bayliss</LastName>
     46 </Customer>	
     47 """
     48 
     49 e = ErrorHandler()
     50 ctxt_parser = libxml2.schemaNewMemParserCtxt(schema, len(schema))
     51 ctxt_schema = ctxt_parser.schemaParse()
     52 ctxt_valid  = ctxt_schema.schemaNewValidCtxt()
     53 ctxt_valid.setValidityErrorHandler(e.handler, e.handler, ARG)
     54 
     55 # Test valid document
     56 doc = libxml2.parseDoc(valid)
     57 ret = doc.schemaValidateDoc(ctxt_valid)
     58 if ret != 0 or e.errors:
     59     print("error doing schema validation")
     60     sys.exit(1)
     61 doc.freeDoc()
     62 
     63 # Test invalid document
     64 doc = libxml2.parseDoc(invalid)
     65 ret = doc.schemaValidateDoc(ctxt_valid)
     66 if ret == 0 or not e.errors:
     67     print("Error: document supposer to be schema invalid")
     68     sys.exit(1)
     69 doc.freeDoc()
     70 
     71 del ctxt_parser
     72 del ctxt_schema
     73 del ctxt_valid
     74 libxml2.schemaCleanupTypes()
     75 
     76 # Memory debug specific
     77 libxml2.cleanupParser()
     78 if libxml2.debugMemory(1) == 0:
     79     print("OK")
     80 else:
     81     print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     82     libxml2.dumpMemory()
     83 
     84