# (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 :