# (c) Tuomas J. Lukka
import java
import javax
import org
import traceback
dbg = 1
def printpsvi(psvi):
print "PSVI: ",psvi.getValidationAttempted(),\
"valid: ",psvi.getValidity()
class TestHandler(org.xml.sax.helpers.DefaultHandler):
def __init__(self, psviProvider):
self.psviProvider = psviProvider
def startElement(self, nsuri, localName, qName, attrs):
psvi = self.psviProvider.getElementPSVI()
print "Start ",localName,psvi
printpsvi(psvi)
def endElement(self, nsuri, localName, qName):
psvi = self.psviProvider.getElementPSVI()
print "End ",localName,psvi
printpsvi(psvi)
def setUpSAX():
global saxparserFactory
saxparserFactory = javax.xml.parsers.SAXParserFactory.newInstance()
saxparserFactory.setNamespaceAware(1)
saxparserFactory.setValidating(1)
saxparserFactory.setFeature("http://xml.org/sax/features/validation",1)
saxparserFactory.setFeature("http://apache.org/xml/features/validation/schema", 1)
saxparserFactory.setFeature("http://apache.org/xml/features/validation/schema-full-checking", 1)
# saxparserFactory.setFeature("nosuchfeature", 1)
def saxparse(doc):
saxparser = saxparserFactory.newSAXParser()
assert saxparser.isNamespaceAware()
assert saxparser.isValidating()
handler = TestHandler(saxparser.getXMLReader())
print "PARSER:", saxparser,"Handler:",handler
saxparser.parse(java.io.ByteArrayInputStream(
java.lang.String(doc).getBytes()),
handler)
def parse(doc):
domparser = org.apache.xerces.parsers.DOMParser()
domparser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", 0)
domparser.setFeature("http://xml.org/sax/features/namespaces", 1)
domparser.setFeature("http://xml.org/sax/features/validation", 1)
domparser.setFeature("http://apache.org/xml/features/validation/schema", 1)
domparser.setFeature("http://apache.org/xml/features/validation/schema/augment-psvi", 1)
domparser.setFeature("http://apache.org/xml/features/validation/schema-full-checking", 1)
domparser.setFeature("http://apache.org/xml/features/validation/warn-on-duplicate-attdef", 1)
# XXX Unknown?
# domparser.setFeature("http://apache.org/xml/features/validation/warn-on-undeclared-elemdef", 1)
domparser.setFeature("http://apache.org/xml/features/warn-on-duplicate-entitydef", 1)
domparser.setFeature("http://apache.org/xml/features/standard-uri-conformant", 1)
domparser.setProperty("http://apache.org/xml/properties/dom/document-class-name",
"org.apache.xerces.dom.PSVIDocumentImpl")
print domparser.class
# for m in domparser.class.getMethods(): print m
domparser.parse(org.xml.sax.InputSource(java.io.ByteArrayInputStream(
java.lang.String(doc).getBytes())))
doc = domparser.getDocument()
print "DOC: ",doc
print "DOCE: ",doc.getDocumentElement()
# In Java, you'd need to cast...
rootPSVI = doc.getDocumentElement()
print doc.class
# for m in doc.class.getMethods(): print m
print rootPSVI.class
# for m in rootPSVI.class.getMethods(): print m
# Must have tried validation
assert rootPSVI.getValidationAttempted() == rootPSVI.VALIDATION_FULL, rootPSVI.getValidationAttempted()
assert rootPSVI.getValidity() == rootPSVI.VALIDITY_VALID, rootPSVI.getValidity()
def ERROR(doc):
try:
parse(doc)
except:
if dbg:
traceback.print_exc()
print "Failed CORRECTLY"
return 0
assert 0 == 1, doc
def testErrors():
# parse("")
# Inside a single tstring in the alph namespace, what we can and can't have.
wrapper = """
%s
"""
# The basic declaration should be ok
parse(wrapper % "")
# ERROR: Malformed XML should cause an error
ERROR(wrapper % " barbar""")
# A basic string with two spans
parse(wrapper % """foobarbar
oobarbar
""")
# ERROR: No offset
ERROR(wrapper % """foobarbar""")
# ERROR: Negative offset
ERROR(wrapper % """foobarbar""")
# ERROR: No URI
ERROR(wrapper % """foobarbar""")
# ERROR: Nested tspans
ERROR(wrapper % """foobarbar""")
# ERROR: Nested tstring
ERROR( wrapper %
"""""")
# vim: set syntax=python :