# regression test for SAX drivers # $Id: test_saxdrivers.py,v 1.6 2002/07/01 18:42:04 fdrake Exp $ from xml.sax.saxutils import XMLGenerator, ContentGenerator from xml.sax import handler, SAXReaderNotAvailable import xml.sax.saxexts import xml.sax.sax2exts from cStringIO import StringIO from test.test_support import verbose, TestFailed, findfile try: import warnings except ImportError: pass else: warnings.filterwarnings("ignore", ".* xmllib .* obsolete.*", DeprecationWarning, 'xmllib$') tests=0 fails=0 xml_test = open(findfile("test.xml.out")).read() xml_test_out = open(findfile("test.xml.out")).read() expected_failures=[ "xml.sax.drivers.drv_sgmlop", # does not handle " entity reference "xml.sax.drivers.drv_xmllib", # reports S before first tag, # does not report xmlns: attribute ] def summarize(p,result): global tests,fails tests=tests+1 if result == xml_test_out: if p in expected_failures: print p,"XPASS" else: print p,"PASS" elif p in expected_failures: print p,"XFAIL" else: print p,"FAIL" fails=fails+1 if verbose: print result #open("test.xml."+p,"w").write(result.getvalue()) def test_sax1(): factory=xml.sax.saxexts.XMLParserFactory for p in factory.get_parser_list(): try: parser = factory._create_parser(p) except ImportError: print p,"NOT SUPPORTED" continue except SAXReaderNotAvailable: print p,"NOT SUPPORTED" continue result = StringIO() xmlgen = ContentGenerator(result) parser.setDocumentHandler(xmlgen) # We should not pass file names to parse; we don't have # any URLs, either parser.parseFile(open(findfile("test.xml"))) summarize(p,result.getvalue()) def test_sax2(): factory = xml.sax.sax2exts.XMLParserFactory for p in factory.get_parser_list(): try: parser = factory._create_parser(p) except ImportError: print p,"NOT SUPPORTED" continue except SAXReaderNotAvailable: print p,"NOT SUPPORTED" continue # Don't try to test namespace support, yet parser.setFeature(handler.feature_namespaces,0) result = StringIO() xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) # In SAX2, we can pass an open file object to parse() parser.parse(open(findfile("test.xml"))) summarize(p,result.getvalue()) def test_incremental(): global tests, fails factory = xml.sax.sax2exts.XMLParserFactory for p in factory.get_parser_list(): try: parser = factory._create_parser(p) except ImportError: print p,"NOT SUPPORTED" continue except SAXReaderNotAvailable: print p,"NOT SUPPORTED" continue if not hasattr(parser, "feed"): continue # Don't try to test namespace support, yet result = StringIO() xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) parser.feed("") parser.feed("") parser.close() tests = tests + 1 if result.getvalue() == '\n': print p, "PASS" else: print p, "FAIL" fails = fails + 1 items = locals().items() items.sort() for (name, value) in items: if name[ : 5] == "test_": value() print "%d tests, %d failures" % (tests, fails) if fails != 0: raise TestFailed, "%d of %d tests failed" % (fails, tests)