38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#!/usr/bin/python -u
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport sys
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport libxml2
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.debugMemory(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Testing XML document serialization
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc = libxml2.parseDoc("""<root><foo>hello</foo></root>""")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<?xml version="1.0"?>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<root><foo>hello</foo></root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML document 1"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize("iso-8859-1")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<?xml version="1.0" encoding="iso-8859-1"?>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<root><foo>hello</foo></root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML document 2"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize(format=1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<?xml version="1.0"?>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync <foo>hello</foo>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML document 3"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize("iso-8859-1", 1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<?xml version="1.0" encoding="iso-8859-1"?>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync <foo>hello</foo>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML document 4"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Test serializing a subnode
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncroot = doc.getRootElement()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<root><foo>hello</foo></root>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML root 1"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize("iso-8859-1")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<root><foo>hello</foo></root>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML root 2"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize(format=1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync <foo>hello</foo>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</root>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML root 3"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize("iso-8859-1", 1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<root>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync <foo>hello</foo>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</root>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing XML root 4"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc.freeDoc()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Testing HTML document serialization
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc = libxml2.htmlParseDoc("""<html><head><title>Hello</title><body><p>hello</body></html>""", None)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<html><head><title>Hello</title></head><body><p>hello</p></body></html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML document 1"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize("ISO-8859-1")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML document 2"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize(format=1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<title>Hello</title>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<body><p>hello</p></body>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML document 3"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = doc.serialize("iso-8859-1", 1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<title>Hello</title>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<body><p>hello</p></body>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML document 4"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Test serializing a subnode
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc.htmlSetMetaEncoding(None)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncroot = doc.getRootElement()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<html><head><title>Hello</title></head><body><p>hello</p></body></html>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML root 1"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize("ISO-8859-1")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif 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>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML root 2"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize(format=1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<title>Hello</title>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<body><p>hello</p></body>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</html>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML root 3"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstr = root.serialize("iso-8859-1", 1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif str != """<html>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<title>Hello</title>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</head>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync<body><p>hello</p></body>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync</html>""":
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "error serializing HTML root 4"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc.freeDoc()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.cleanupParser()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif libxml2.debugMemory(1) == 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "OK"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncelse:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Memory leak %d bytes" % (libxml2.debugMemory(1))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.dumpMemory()