14e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#!/usr/bin/python -u
24e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardimport sys
34e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardimport libxml2
44e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
54e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard# Memory debug specific
64e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardlibxml2.debugMemory(1)
74e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
84e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
94e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard# Testing XML document serialization
104e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
114e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillarddoc = libxml2.parseDoc("""<root><foo>hello</foo></root>""")
124e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize()
134e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<?xml version="1.0"?>
144e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<root><foo>hello</foo></root>
154e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
162cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML document 1")
174e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
184e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize("iso-8859-1")
194e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<?xml version="1.0" encoding="iso-8859-1"?>
204e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<root><foo>hello</foo></root>
214e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
222cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML document 2")
234e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
244e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize(format=1)
254e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<?xml version="1.0"?>
264e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<root>
275f91b37818f431ca91ddd65088f7f84e0c2b55d1Daniel Veillard  <foo>hello</foo>
284e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</root>
294e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
302cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML document 3")
314e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
324e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize("iso-8859-1", 1)
334e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<?xml version="1.0" encoding="iso-8859-1"?>
344e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<root>
355f91b37818f431ca91ddd65088f7f84e0c2b55d1Daniel Veillard  <foo>hello</foo>
364e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</root>
374e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
382cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML document 4")
394e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
404e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
414e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
424e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard# Test serializing a subnode
434e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
444e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardroot = doc.getRootElement()
454e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize()
464e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<root><foo>hello</foo></root>""":
472cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML root 1")
484e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
494e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize("iso-8859-1")
504e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<root><foo>hello</foo></root>""":
512cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML root 2")
524e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
534e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize(format=1)
544e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<root>
555f91b37818f431ca91ddd65088f7f84e0c2b55d1Daniel Veillard  <foo>hello</foo>
564e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</root>""":
572cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML root 3")
584e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
594e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize("iso-8859-1", 1)
604e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<root>
615f91b37818f431ca91ddd65088f7f84e0c2b55d1Daniel Veillard  <foo>hello</foo>
624e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</root>""":
632cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing XML root 4")
644e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
654e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillarddoc.freeDoc()
664e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
674e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
684e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard# Testing HTML document serialization
694e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
704e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillarddoc = libxml2.htmlParseDoc("""<html><head><title>Hello</title><body><p>hello</body></html>""", None)
714e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize()
726cbd6c0738efb6c55d08f39c0731d46d678858faDaniel Veillardif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
734e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<html><head><title>Hello</title></head><body><p>hello</p></body></html>
744e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
752cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML document 1")
764e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
774e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize("ISO-8859-1")
786cbd6c0738efb6c55d08f39c0731d46d678858faDaniel Veillardif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
79c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>
804e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
812cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML document 2")
824e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
834e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize(format=1)
846cbd6c0738efb6c55d08f39c0731d46d678858faDaniel Veillardif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
854e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<html>
864e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<head>
87c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
884e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<title>Hello</title>
894e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</head>
904e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<body><p>hello</p></body>
914e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</html>
924e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
932cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML document 3")
944e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
954e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = doc.serialize("iso-8859-1", 1)
966cbd6c0738efb6c55d08f39c0731d46d678858faDaniel Veillardif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
974e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<html>
984e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<head>
9939d027cdb74371d64f68dc488556be41e1d14546Daniel Veillard<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
1004e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<title>Hello</title>
1014e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</head>
1024e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<body><p>hello</p></body>
1034e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</html>
1044e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard""":
1052cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML document 4")
1064e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
1074e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
1084e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
1094e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard# Test serializing a subnode
1104e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard#
1114e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillarddoc.htmlSetMetaEncoding(None)
1124e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardroot = doc.getRootElement()
1134e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize()
1144e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<html><head><title>Hello</title></head><body><p>hello</p></body></html>""":
1152cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML root 1")
1164e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
1174e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize("ISO-8859-1")
118c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillardif str != """<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>""":
1192cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML root 2")
1204e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
1214e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize(format=1)
1224e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<html>
1234e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<head>
124c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
1254e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<title>Hello</title>
1264e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</head>
1274e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<body><p>hello</p></body>
1284e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</html>""":
1292cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML root 3")
1304e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
1314e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardstr = root.serialize("iso-8859-1", 1)
1324e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif str != """<html>
1334e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<head>
13439d027cdb74371d64f68dc488556be41e1d14546Daniel Veillard<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
1354e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<title>Hello</title>
1364e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</head>
1374e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard<body><p>hello</p></body>
1384e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard</html>""":
1392cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard   print("error serializing HTML root 4")
1404e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard   sys.exit(1)
1414e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
1424e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillarddoc.freeDoc()
1434e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard
1444e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard# Memory debug specific
1454e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardlibxml2.cleanupParser()
1464e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardif libxml2.debugMemory(1) == 0:
1472cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("OK")
1484e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillardelse:
1492cb6bf8eb019cc88578093abee3e37a78e7b3020Daniel Veillard    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
1504e0e29746889d4a70728e6406eed2f546287bdd6Daniel Veillard    libxml2.dumpMemory()
151