xref: /aosp_15_r20/external/libxml2/python/tests/xpath.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Worker#
3*7c568831SAndroid Build Coastguard Worker# this test exercise the XPath basic engine, parser, etc, and
4*7c568831SAndroid Build Coastguard Worker# allows to detect memory leaks
5*7c568831SAndroid Build Coastguard Worker#
6*7c568831SAndroid Build Coastguard Workerimport sys
7*7c568831SAndroid Build Coastguard Workerimport setup_test
8*7c568831SAndroid Build Coastguard Workerimport libxml2
9*7c568831SAndroid Build Coastguard Worker
10*7c568831SAndroid Build Coastguard Worker# Memory debug specific
11*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(1)
12*7c568831SAndroid Build Coastguard Worker
13*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseFile("tst.xml")
14*7c568831SAndroid Build Coastguard Workerif doc.name != "tst.xml":
15*7c568831SAndroid Build Coastguard Worker    print("doc.name error")
16*7c568831SAndroid Build Coastguard Worker    sys.exit(1);
17*7c568831SAndroid Build Coastguard Worker
18*7c568831SAndroid Build Coastguard Workerctxt = doc.xpathNewContext()
19*7c568831SAndroid Build Coastguard Workerres = ctxt.xpathEval("//*")
20*7c568831SAndroid Build Coastguard Workerif len(res) != 2:
21*7c568831SAndroid Build Coastguard Worker    print("xpath query: wrong node set size")
22*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
23*7c568831SAndroid Build Coastguard Workerif res[0].name != "doc" or res[1].name != "foo":
24*7c568831SAndroid Build Coastguard Worker    print("xpath query: wrong node set value")
25*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
26*7c568831SAndroid Build Coastguard Workerctxt.setContextNode(res[0])
27*7c568831SAndroid Build Coastguard Workerres = ctxt.xpathEval("foo")
28*7c568831SAndroid Build Coastguard Workerif len(res) != 1:
29*7c568831SAndroid Build Coastguard Worker    print("xpath query: wrong node set size")
30*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
31*7c568831SAndroid Build Coastguard Workerif res[0].name != "foo":
32*7c568831SAndroid Build Coastguard Worker    print("xpath query: wrong node set value")
33*7c568831SAndroid Build Coastguard Worker    sys.exit(1)
34*7c568831SAndroid Build Coastguard Workerdoc.freeDoc()
35*7c568831SAndroid Build Coastguard Workerctxt.xpathFreeContext()
36*7c568831SAndroid Build Coastguard Workeri = 1000
37*7c568831SAndroid Build Coastguard Workerwhile i > 0:
38*7c568831SAndroid Build Coastguard Worker    doc = libxml2.parseFile("tst.xml")
39*7c568831SAndroid Build Coastguard Worker    ctxt = doc.xpathNewContext()
40*7c568831SAndroid Build Coastguard Worker    res = ctxt.xpathEval("//*")
41*7c568831SAndroid Build Coastguard Worker    doc.freeDoc()
42*7c568831SAndroid Build Coastguard Worker    ctxt.xpathFreeContext()
43*7c568831SAndroid Build Coastguard Worker    i = i -1
44*7c568831SAndroid Build Coastguard Workerdel ctxt
45*7c568831SAndroid Build Coastguard Worker
46*7c568831SAndroid Build Coastguard Worker# Memory debug specific
47*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser()
48*7c568831SAndroid Build Coastguard Workerif libxml2.debugMemory(1) == 0:
49*7c568831SAndroid Build Coastguard Worker    print("OK")
50*7c568831SAndroid Build Coastguard Workerelse:
51*7c568831SAndroid Build Coastguard Worker    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
52