126f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard#!/usr/bin/python -u 226f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardimport sys 326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardimport libxml2 426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 54e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillard# Memory debug specific 64e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillardlibxml2.debugMemory(1) 74e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillard 826f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardctxt = libxml2.createFileParserCtxt("valid.xml") 926f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardctxt.validate(1) 1026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardctxt.parseDocument() 1126f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillarddoc = ctxt.doc() 1226f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardvalid = ctxt.isValid() 1326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 1426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardif doc.name != "valid.xml": 152cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("doc.name failed") 1626f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard sys.exit(1) 1726f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardroot = doc.children 1826f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardif root.name != "doc": 192cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("root.name failed") 2026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard sys.exit(1) 2126f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardif valid != 1: 222cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("validity chec failed") 2326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard sys.exit(1) 2426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillarddoc.freeDoc() 2526f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 2626f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardi = 1000 2726f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardwhile i > 0: 2826f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard ctxt = libxml2.createFileParserCtxt("valid.xml") 2926f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard ctxt.validate(1) 3026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard ctxt.parseDocument() 3126f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard doc = ctxt.doc() 3226f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard valid = ctxt.isValid() 3326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard doc.freeDoc() 3426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard if valid != 1: 352cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("validity check failed") 3609b792ba3056eddb7ed5cc9c759b6510b3ef7743Daniel Veillard sys.exit(1) 3726f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard i = i - 1 3826f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 3926f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard#desactivate error messages from the validation 4026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillarddef noerr(ctx, str): 4126f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard pass 4226f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 4326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardlibxml2.registerErrorHandler(noerr, None) 4426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 4526f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardctxt = libxml2.createFileParserCtxt("invalid.xml") 4626f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardctxt.validate(1) 4726f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardctxt.parseDocument() 4826f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillarddoc = ctxt.doc() 4926f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardvalid = ctxt.isValid() 5026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardif doc.name != "invalid.xml": 512cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("doc.name failed") 5226f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard sys.exit(1) 5326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardroot = doc.children 5426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardif root.name != "doc": 552cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("root.name failed") 5626f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard sys.exit(1) 5726f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardif valid != 0: 582cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("validity chec failed") 5926f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard sys.exit(1) 6026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillarddoc.freeDoc() 6126f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 6226f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardi = 1000 6326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillardwhile i > 0: 6426f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard ctxt = libxml2.createFileParserCtxt("invalid.xml") 6526f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard ctxt.validate(1) 6626f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard ctxt.parseDocument() 6726f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard doc = ctxt.doc() 6826f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard valid = ctxt.isValid() 6926f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard doc.freeDoc() 7026f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard if valid != 0: 712cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("validity check failed") 7209b792ba3056eddb7ed5cc9c759b6510b3ef7743Daniel Veillard sys.exit(1) 7326f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard i = i - 1 744e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillarddel ctxt 7526f1dcc5bda9fbd0711bd93f72ed20d4eaec3cbfDaniel Veillard 764e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillard# Memory debug specific 774e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillardlibxml2.cleanupParser() 784e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillardif libxml2.debugMemory(1) == 0: 792cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("OK") 804e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillardelse: 812cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard print("Memory leak %d bytes" % (libxml2.debugMemory(1))) 824e1b26cfeba7f5fad4f8bd12fb5ce7029f930b79Daniel Veillard libxml2.dumpMemory() 83