38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#!/usr/bin/python -u
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# this test exercise the XPath basic engine, parser, etc, and
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# allows to detect memory leaks
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport sys
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport libxml2
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.debugMemory(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc = libxml2.parseFile("tst.xml")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif doc.name != "tst.xml":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "doc.name error"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt = doc.xpathNewContext()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncres = ctxt.xpathEval("//*")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif len(res) != 2:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "xpath query: wrong node set size"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif res[0].name != "doc" or res[1].name != "foo":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "xpath query: wrong node set value"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt.setContextNode(res[0])
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncres = ctxt.xpathEval("foo")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif len(res) != 1:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "xpath query: wrong node set size"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif res[0].name != "foo":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "xpath query: wrong node set value"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc.freeDoc()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncctxt.xpathFreeContext()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynci = 1000
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncwhile i > 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = libxml2.parseFile("tst.xml")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ctxt = doc.xpathNewContext()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync res = ctxt.xpathEval("//*")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc.freeDoc()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ctxt.xpathFreeContext()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync i = i -1
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdel ctxt
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.cleanupParser()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif libxml2.debugMemory(1) == 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "OK"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncelse:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Memory leak %d bytes" % (libxml2.debugMemory(1))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.dumpMemory()