mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-21 14:53:44 +03:00
Don't use encoding from meta tags when serializing. Only use the value in `doc->encoding`, matching the XML serializer. This is the actual encoding used when parsing. Stop modifying the input document by setting meta tags before serializing. Meta tags are now injected during serialization. Add full support for <meta charset=""> which is also used when adding meta tags. Align with HTML5 and implement the "algorithm for extracting a character encoding from a meta element". Only modify the encoding substring in Content-Type meta tags. Only switch encoding once when parsing. Fix htmlSaveFileFormat with a NULL encoding not to declare a misleading UTF-8 charset. Fixes #909.
145 lines
3.9 KiB
Python
Executable File
145 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import sys
|
|
import setup_test
|
|
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 charset="ISO-8859-1"><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><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 charset="iso-8859-1">
|
|
<title>Hello</title>
|
|
</head>
|
|
<body><p>hello</p></body>
|
|
</html>
|
|
""":
|
|
print("error serializing HTML document 4", str)
|
|
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 charset="ISO-8859-1"><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><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 charset="iso-8859-1">
|
|
<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)))
|