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