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