xref: /aosp_15_r20/external/libxml2/python/tests/validSchemas.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
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