mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-07-17 18:21:05 +03:00
extended the XmlTextReader API a bit, addding accessors for the current
* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: extended the XmlTextReader API a bit, addding accessors for the current doc and node, and an entity substitution mode for the parser. * python/libxml.py python/libxml2class.txt: related updates * python/tests/Makefile.am python/tests/reader.py python/tests/reader2.py python/tests/reader3.py: updated a bit the old tests and added a new one to test the entities handling Daniel
This commit is contained in:
107
python/tests/reader3.py
Executable file
107
python/tests/reader3.py
Executable file
@ -0,0 +1,107 @@
|
||||
#!/usr/bin/python -u
|
||||
#
|
||||
# this tests the validation with the XmlTextReader interface
|
||||
#
|
||||
import sys
|
||||
import StringIO
|
||||
import libxml2
|
||||
|
||||
docstr="""<?xml version='1.0'?>
|
||||
<!DOCTYPE doc [
|
||||
<!ENTITY tst "<p>test</p>">
|
||||
]>
|
||||
<doc>&tst;</doc>"""
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.debugMemory(1)
|
||||
|
||||
#
|
||||
# First test, normal don't substitute entities.
|
||||
#
|
||||
f = StringIO.StringIO(docstr)
|
||||
input = libxml2.inputBuffer(f)
|
||||
reader = input.newTextReader("test_noent")
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "Error reading to root"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "doc" or reader.NodeType() != 1:
|
||||
print "test_normal: Error reading the root element"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "test_normal: Error reading to the entity"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "tst" or reader.NodeType() != 5:
|
||||
print "test_normal: Error reading the entity"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "test_normal: Error reading to the end of root"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "doc" or reader.NodeType() != 15:
|
||||
print "test_normal: Error reading the end of the root element"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 0:
|
||||
print "test_normal: Error detecting the end"
|
||||
sys.exit(1)
|
||||
|
||||
#
|
||||
# Second test, completely substitute the entities.
|
||||
#
|
||||
f = StringIO.StringIO(docstr)
|
||||
input = libxml2.inputBuffer(f)
|
||||
reader = input.newTextReader("test_noent")
|
||||
reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES, 1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "Error reading to root"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "doc" or reader.NodeType() != 1:
|
||||
print "test_noent: Error reading the root element"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "test_noent: Error reading to the entity content"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "p" or reader.NodeType() != 1:
|
||||
print "test_noent: Error reading the p element from entity"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "test_noent: Error reading to the text node"
|
||||
sys.exit(1)
|
||||
if reader.NodeType() != 3 or reader.Value() != "test":
|
||||
print "test_noent: Error reading the text node"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "test_noent: Error reading to the end of p element"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "p" or reader.NodeType() != 15:
|
||||
print "test_noent: Error reading the end of the p element"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 1:
|
||||
print "test_noent: Error reading to the end of root"
|
||||
sys.exit(1)
|
||||
if reader.Name() != "doc" or reader.NodeType() != 15:
|
||||
print "test_noent: Error reading the end of the root element"
|
||||
sys.exit(1)
|
||||
ret = reader.Read()
|
||||
if ret != 0:
|
||||
print "test_noent: Error detecting the end"
|
||||
sys.exit(1)
|
||||
|
||||
del f
|
||||
del input
|
||||
del reader
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.cleanupParser()
|
||||
if libxml2.debugMemory(1) == 0:
|
||||
print "OK"
|
||||
else:
|
||||
print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
||||
libxml2.dumpMemory()
|
Reference in New Issue
Block a user