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