Git init
[external/libxml2.git] / python / tests / validSchemas.py
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