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