diff options
| author | Daniel Veillard <veillard@src.gnome.org> | 2002-03-06 21:39:42 +0000 |
|---|---|---|
| committer | Daniel Veillard <veillard@src.gnome.org> | 2002-03-06 21:39:42 +0000 |
| commit | 4e0e29746889d4a70728e6406eed2f546287bdd6 (patch) | |
| tree | 4ed60303bdd125885d709608ded57fbdab02c320 | |
| parent | e915b2d423f00add4abd968390e96edcf5d7e6a4 (diff) | |
| download | android_external_libxml2-4e0e29746889d4a70728e6406eed2f546287bdd6.tar.gz android_external_libxml2-4e0e29746889d4a70728e6406eed2f546287bdd6.tar.bz2 android_external_libxml2-4e0e29746889d4a70728e6406eed2f546287bdd6.zip | |
fixed some htmlSetMetaEncoding() problems fixup and integrated tests for
* HTMLtree.c: fixed some htmlSetMetaEncoding() problems
* python/libxml.c python/tests/Makefile.am python/tests/serialize.py:
fixup and integrated tests for the serialization stuff
Daniel
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | HTMLtree.c | 10 | ||||
| -rw-r--r-- | python/libxml.c | 8 | ||||
| -rw-r--r-- | python/tests/Makefile.am | 1 | ||||
| -rwxr-xr-x | python/tests/serialize.py | 150 |
5 files changed, 165 insertions, 10 deletions
@@ -1,3 +1,9 @@ +Wed Mar 6 22:38:03 CET 2002 Daniel Veillard <daniel@veillard.com> + + * HTMLtree.c: fixed some htmlSetMetaEncoding() problems + * python/libxml.c python/tests/Makefile.am python/tests/serialize.py: + fixup and integrated tests for the serialization stuff + Wed Mar 6 19:40:57 CET 2002 Daniel Veillard <daniel@veillard.com> * Makefile.am libxml.3 libxml.4 libxml.spec.in: Fixed bug #72570 @@ -242,11 +242,9 @@ found_meta: xmlAttrPtr attr = cur->properties; int http; const xmlChar *value; - int same_charset; content = NULL; http = 0; - same_charset = 0; while (attr != NULL) { if ((attr->children != NULL) && (attr->children->type == XML_TEXT_NODE) && @@ -264,17 +262,13 @@ found_meta: if ((value != NULL) && (!xmlStrcasecmp(attr->name, BAD_CAST"content"))) content = value; - else - if ((!xmlStrcasecmp(attr->name, BAD_CAST"charset")) - && (!xmlStrcasecmp(value, encoding))) - same_charset = 1; } - if ((http != 0) && (content != NULL) && (same_charset != 0)) + if ((http != 0) && (content != NULL)) break; } attr = attr->next; } - if ((http != 0) && (content != NULL) && (same_charset != 0)) { + if ((http != 0) && (content != NULL)) { meta = cur; cur = cur->next; xmlUnlinkNode(meta); diff --git a/python/libxml.c b/python/libxml.c index efa42fcd..026b0bc2 100644 --- a/python/libxml.c +++ b/python/libxml.c @@ -1491,8 +1491,9 @@ libxml_serializeNode(PyObject *self, PyObject *args) { xmlCharEncodingHandlerPtr handler = NULL; doc = (xmlDocPtr) node; - if (encoding == NULL) - encoding = (xmlChar *) htmlGetMetaEncoding(doc); + if (encoding != NULL) + htmlSetMetaEncoding(doc, encoding); + encoding = (xmlChar *) htmlGetMetaEncoding(doc); if (encoding != NULL) { handler = xmlFindCharEncodingHandler(encoding); @@ -1564,6 +1565,9 @@ libxml_serializeNode(PyObject *self, PyObject *args) { xmlOutputBufferPtr buf; xmlCharEncodingHandlerPtr handler = NULL; + if (encoding != NULL) + htmlSetMetaEncoding(doc, encoding); + encoding = (xmlChar *) htmlGetMetaEncoding(doc); if (encoding != NULL) { handler = xmlFindCharEncodingHandler(encoding); if (handler == NULL) { diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am index e836fd5b..b5e2c43f 100644 --- a/python/tests/Makefile.am +++ b/python/tests/Makefile.am @@ -8,6 +8,7 @@ PYTESTS= \ push.py \ pushSAX.py \ error.py \ + serialize.py\ validate.py \ tstURI.py \ xpathret.py \ diff --git a/python/tests/serialize.py b/python/tests/serialize.py new file mode 100755 index 00000000..b79d0a5d --- /dev/null +++ b/python/tests/serialize.py @@ -0,0 +1,150 @@ +#!/usr/bin/python -u +import sys +import libxml2 + +# Memory debug specific +libxml2.debugMemory(1) + +# +# Testing XML document serialization +# +doc = libxml2.parseDoc("""<root><foo>hello</foo></root>""") +str = doc.serialize() +if str != """<?xml version="1.0"?> +<root><foo>hello</foo></root> +""": + print "error serializing XML document 1" + sys.exit(1) +str = doc.serialize("iso-8859-1") +if str != """<?xml version="1.0" encoding="iso-8859-1"?> +<root><foo>hello</foo></root> +""": + print "error serializing XML document 2" + sys.exit(1) +str = doc.serialize(format=1) +if str != """<?xml version="1.0"?> +<root> +<foo>hello</foo> +</root> +""": + print "error serializing XML document 3" + sys.exit(1) +str = doc.serialize("iso-8859-1", 1) +if str != """<?xml version="1.0" encoding="iso-8859-1"?> +<root> +<foo>hello</foo> +</root> +""": + print "error serializing XML document 4" + sys.exit(1) + +# +# Test serializing a subnode +# +root = doc.getRootElement() +str = root.serialize() +if str != """<root><foo>hello</foo></root>""": + print "error serializing XML root 1" + sys.exit(1) +str = root.serialize("iso-8859-1") +if str != """<root><foo>hello</foo></root>""": + print "error serializing XML root 2" + sys.exit(1) +str = root.serialize(format=1) +if str != """<root> +<foo>hello</foo> +</root>""": + print "error serializing XML root 3" + sys.exit(1) +str = root.serialize("iso-8859-1", 1) +if str != """<root> +<foo>hello</foo> +</root>""": + print "error serializing XML root 4" + sys.exit(1) +doc.freeDoc() + +# +# Testing HTML document serialization +# +doc = libxml2.htmlParseDoc("""<html><head><title>Hello</title><body><p>hello</body></html>""", None) +str = doc.serialize() +if str != """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<html><head><title>Hello</title></head><body><p>hello</p></body></html> +""": + print "error serializing HTML document 1" + sys.exit(1) +str = doc.serialize("ISO-8859-1") +if str != """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Hello</title></head><body><p>hello</p></body></html> +""": + print "error serializing HTML document 2" + sys.exit(1) +str = doc.serialize(format=1) +if str != """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<html> +<head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"> +<title>Hello</title> +</head> +<body><p>hello</p></body> +</html> +""": + print "error serializing HTML document 3" + sys.exit(1) +str = doc.serialize("iso-8859-1", 1) +if str != """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<html> +<head> +<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> +<title>Hello</title> +</head> +<body><p>hello</p></body> +</html> +""": + print "error serializing HTML document 4" + sys.exit(1) + +# +# Test serializing a subnode +# +doc.htmlSetMetaEncoding(None) +root = doc.getRootElement() +str = root.serialize() +if str != """<html><head><title>Hello</title></head><body><p>hello</p></body></html>""": + print "error serializing HTML root 1" + sys.exit(1) +str = root.serialize("ISO-8859-1") +if str != """<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Hello</title></head><body><p>hello</p></body></html>""": + print "error serializing HTML root 2" + sys.exit(1) +str = root.serialize(format=1) +if str != """<html> +<head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"> +<title>Hello</title> +</head> +<body><p>hello</p></body> +</html>""": + print "error serializing HTML root 3" + sys.exit(1) +str = root.serialize("iso-8859-1", 1) +if str != """<html> +<head> +<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> +<title>Hello</title> +</head> +<body><p>hello</p></body> +</html>""": + print "error serializing HTML root 4" + sys.exit(1) + +doc.freeDoc() + +# Memory debug specific +libxml2.cleanupParser() +if libxml2.debugMemory(1) == 0: + print "OK" +else: + print "Memory leak %d bytes" % (libxml2.debugMemory(1)) + libxml2.dumpMemory() |
