Imported Upstream version 2.9.1
[platform/upstream/libxml2.git] / python / tests / xpath.py
1 #!/usr/bin/python -u
2 #
3 # this test exercise the XPath basic engine, parser, etc, and
4 # allows to detect memory leaks
5 #
6 import sys
7 import libxml2
8
9 # Memory debug specific
10 libxml2.debugMemory(1)
11
12 doc = libxml2.parseFile("tst.xml")
13 if doc.name != "tst.xml":
14     print("doc.name error")
15     sys.exit(1);
16
17 ctxt = doc.xpathNewContext()
18 res = ctxt.xpathEval("//*")
19 if len(res) != 2:
20     print("xpath query: wrong node set size")
21     sys.exit(1)
22 if res[0].name != "doc" or res[1].name != "foo":
23     print("xpath query: wrong node set value")
24     sys.exit(1)
25 ctxt.setContextNode(res[0])
26 res = ctxt.xpathEval("foo")
27 if len(res) != 1:
28     print("xpath query: wrong node set size")
29     sys.exit(1)
30 if res[0].name != "foo":
31     print("xpath query: wrong node set value")
32     sys.exit(1)
33 doc.freeDoc()
34 ctxt.xpathFreeContext()
35 i = 1000
36 while i > 0:
37     doc = libxml2.parseFile("tst.xml")
38     ctxt = doc.xpathNewContext()
39     res = ctxt.xpathEval("//*")
40     doc.freeDoc()
41     ctxt.xpathFreeContext()
42     i = i -1
43 del ctxt
44
45 # Memory debug specific
46 libxml2.cleanupParser()
47 if libxml2.debugMemory(1) == 0:
48     print("OK")
49 else:
50     print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
51     libxml2.dumpMemory()