136eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard#!/usr/bin/python -u
236eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardimport libxml2
336eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardimport sys
436eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard
536eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard# Memory debug specific
636eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardlibxml2.debugMemory(1)
736eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard
836eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc = libxml2.newDoc("1.0")
936eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardcomment = doc.newDocComment("This is a generated document")
1036eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc.addChild(comment)
1136eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardpi = libxml2.newPI("test", "PI content")
1236eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc.addChild(pi)
1336eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardroot = doc.newChild(None, "doc", None)
1436eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardns = root.newNs("http://example.com/doc", "my")
1536eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardroot.setNs(ns)
1636eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardelem = root.newChild(None, "foo", "bar")
1736eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardelem.setBase("http://example.com/imgs")
1836eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardelem.setProp("img", "image.gif")
1936eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc.saveFile("tmp.xml")
2036eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc.freeDoc()
2136eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard
2236eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc = libxml2.parseFile("tmp.xml")
2336eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardcomment = doc.children
2436eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif comment.type != "comment" or \
2536eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   comment.content != "This is a generated document":
262cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading comment")
2736eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
2836eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardpi = comment.next
2936eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif pi.type != "pi" or pi.name != "test" or pi.content != "PI content":
302cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading PI")
3136eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
3236eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardroot = pi.next
3336eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif root.name != "doc":
342cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading root")
3536eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
3636eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardns = root.ns()
3736eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif ns.name != "my" or ns.content != "http://example.com/doc":
382cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading namespace")
3936eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
4036eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardelem = root.children
4136eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif elem.name != "foo":
422cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading elem")
4336eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
4436eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif elem.getBase(None) != "http://example.com/imgs":
452cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading base")
4636eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
4736eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif elem.prop("img") != "image.gif":
482cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error rereading property")
4936eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard   sys.exit(1)
5036eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard
5136eea2d2ee84132e66552f84724e9b377d687681Daniel Veillarddoc.freeDoc()
5236eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard
5336eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard# Memory debug specific
5436eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardlibxml2.cleanupParser()
5536eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardif libxml2.debugMemory(1) == 0:
562cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("OK")
5736eea2d2ee84132e66552f84724e9b377d687681Daniel Veillardelse:
582cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
5936eea2d2ee84132e66552f84724e9b377d687681Daniel Veillard    libxml2.dumpMemory()
60