aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2002-03-06 21:39:42 +0000
committerDaniel Veillard <veillard@src.gnome.org>2002-03-06 21:39:42 +0000
commit4e0e29746889d4a70728e6406eed2f546287bdd6 (patch)
tree4ed60303bdd125885d709608ded57fbdab02c320
parente915b2d423f00add4abd968390e96edcf5d7e6a4 (diff)
downloadandroid_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--ChangeLog6
-rw-r--r--HTMLtree.c10
-rw-r--r--python/libxml.c8
-rw-r--r--python/tests/Makefile.am1
-rwxr-xr-xpython/tests/serialize.py150
5 files changed, 165 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 435d8500..553e967a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/HTMLtree.c b/HTMLtree.c
index 3113670d..c0e00501 100644
--- a/HTMLtree.c
+++ b/HTMLtree.c
@@ -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()