diff options
Diffstat (limited to 'libxml2/check-xml-test-suite.py')
-rwxr-xr-x | libxml2/check-xml-test-suite.py | 409 |
1 files changed, 0 insertions, 409 deletions
diff --git a/libxml2/check-xml-test-suite.py b/libxml2/check-xml-test-suite.py deleted file mode 100755 index 2de07b1..0000000 --- a/libxml2/check-xml-test-suite.py +++ /dev/null @@ -1,409 +0,0 @@ -#!/usr/bin/python -import sys -import time -import os -import string -sys.path.insert(0, "python") -import libxml2 - -test_nr = 0 -test_succeed = 0 -test_failed = 0 -test_error = 0 - -# -# the testsuite description -# -CONF="xml-test-suite/xmlconf/xmlconf.xml" -LOG="check-xml-test-suite.log" - -log = open(LOG, "w") - -# -# Error and warning handlers -# -error_nr = 0 -error_msg = '' -def errorHandler(ctx, str): - global error_nr - global error_msg - - error_nr = error_nr + 1 - if len(error_msg) < 300: - if len(error_msg) == 0 or error_msg[-1] == '\n': - error_msg = error_msg + " >>" + str - else: - error_msg = error_msg + str - -libxml2.registerErrorHandler(errorHandler, None) - -#warning_nr = 0 -#warning = '' -#def warningHandler(ctx, str): -# global warning_nr -# global warning -# -# warning_nr = warning_nr + 1 -# warning = warning + str -# -#libxml2.registerWarningHandler(warningHandler, None) - -# -# Used to load the XML testsuite description -# -def loadNoentDoc(filename): - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return None - ctxt.replaceEntities(1) - ctxt.parseDocument() - try: - doc = ctxt.doc() - except: - doc = None - if ctxt.wellFormed() != 1: - doc.freeDoc() - return None - return doc - -# -# The conformance testing routines -# - -def testNotWf(filename, id): - global error_nr - global error_msg - global log - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ret = ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - if doc != None: - doc.freeDoc() - if ret == 0 or ctxt.wellFormed() != 0: - print "%s: error: Well Formedness error not detected" % (id) - log.write("%s: error: Well Formedness error not detected\n" % (id)) - return 0 - return 1 - -def testNotWfEnt(filename, id): - global error_nr - global error_msg - global log - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ctxt.replaceEntities(1) - ret = ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - if doc != None: - doc.freeDoc() - if ret == 0 or ctxt.wellFormed() != 0: - print "%s: error: Well Formedness error not detected" % (id) - log.write("%s: error: Well Formedness error not detected\n" % (id)) - return 0 - return 1 - -def testNotWfEntDtd(filename, id): - global error_nr - global error_msg - global log - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ctxt.replaceEntities(1) - ctxt.loadSubset(1) - ret = ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - if doc != None: - doc.freeDoc() - if ret == 0 or ctxt.wellFormed() != 0: - print "%s: error: Well Formedness error not detected" % (id) - log.write("%s: error: Well Formedness error not detected\n" % (id)) - return 0 - return 1 - -def testWfEntDtd(filename, id): - global error_nr - global error_msg - global log - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ctxt.replaceEntities(1) - ctxt.loadSubset(1) - ret = ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - if doc == None or ret != 0 or ctxt.wellFormed() == 0: - print "%s: error: wrongly failed to parse the document" % (id) - log.write("%s: error: wrongly failed to parse the document\n" % (id)) - if doc != None: - doc.freeDoc() - return 0 - if error_nr != 0: - print "%s: warning: WF document generated an error msg" % (id) - log.write("%s: error: WF document generated an error msg\n" % (id)) - doc.freeDoc() - return 2 - doc.freeDoc() - return 1 - -def testError(filename, id): - global error_nr - global error_msg - global log - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ctxt.replaceEntities(1) - ctxt.loadSubset(1) - ret = ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - if doc != None: - doc.freeDoc() - if ctxt.wellFormed() == 0: - print "%s: warning: failed to parse the document but accepted" % (id) - log.write("%s: warning: failed to parse the document but accepte\n" % (id)) - return 2 - if error_nr != 0: - print "%s: warning: WF document generated an error msg" % (id) - log.write("%s: error: WF document generated an error msg\n" % (id)) - return 2 - return 1 - -def testInvalid(filename, id): - global error_nr - global error_msg - global log - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ctxt.validate(1) - ret = ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - valid = ctxt.isValid() - if doc == None: - print "%s: error: wrongly failed to parse the document" % (id) - log.write("%s: error: wrongly failed to parse the document\n" % (id)) - return 0 - if valid == 1: - print "%s: error: Validity error not detected" % (id) - log.write("%s: error: Validity error not detected\n" % (id)) - doc.freeDoc() - return 0 - if error_nr == 0: - print "%s: warning: Validity error not reported" % (id) - log.write("%s: warning: Validity error not reported\n" % (id)) - doc.freeDoc() - return 2 - - doc.freeDoc() - return 1 - -def testValid(filename, id): - global error_nr - global error_msg - - error_nr = 0 - error_msg = '' - - ctxt = libxml2.createFileParserCtxt(filename) - if ctxt == None: - return -1 - ctxt.validate(1) - ctxt.parseDocument() - - try: - doc = ctxt.doc() - except: - doc = None - valid = ctxt.isValid() - if doc == None: - print "%s: error: wrongly failed to parse the document" % (id) - log.write("%s: error: wrongly failed to parse the document\n" % (id)) - return 0 - if valid != 1: - print "%s: error: Validity check failed" % (id) - log.write("%s: error: Validity check failed\n" % (id)) - doc.freeDoc() - return 0 - if error_nr != 0 or valid != 1: - print "%s: warning: valid document reported an error" % (id) - log.write("%s: warning: valid document reported an error\n" % (id)) - doc.freeDoc() - return 2 - doc.freeDoc() - return 1 - -def runTest(test): - global test_nr - global test_succeed - global test_failed - global error_msg - global log - - uri = test.prop('URI') - id = test.prop('ID') - if uri == None: - print "Test without ID:", uri - return -1 - if id == None: - print "Test without URI:", id - return -1 - base = test.getBase(None) - URI = libxml2.buildURI(uri, base) - if os.access(URI, os.R_OK) == 0: - print "Test %s missing: base %s uri %s" % (URI, base, uri) - return -1 - type = test.prop('TYPE') - if type == None: - print "Test %s missing TYPE" % (id) - return -1 - - extra = None - if type == "invalid": - res = testInvalid(URI, id) - elif type == "valid": - res = testValid(URI, id) - elif type == "not-wf": - extra = test.prop('ENTITIES') - # print URI - #if extra == None: - # res = testNotWfEntDtd(URI, id) - #elif extra == 'none': - # res = testNotWf(URI, id) - #elif extra == 'general': - # res = testNotWfEnt(URI, id) - #elif extra == 'both' or extra == 'parameter': - res = testNotWfEntDtd(URI, id) - #else: - # print "Unknow value %s for an ENTITIES test value" % (extra) - # return -1 - elif type == "error": - res = testError(URI, id) - else: - # TODO skipped for now - return -1 - - test_nr = test_nr + 1 - if res > 0: - test_succeed = test_succeed + 1 - elif res == 0: - test_failed = test_failed + 1 - elif res < 0: - test_error = test_error + 1 - - # Log the ontext - if res != 1: - log.write(" File: %s\n" % (URI)) - content = string.strip(test.content) - while content[-1] == '\n': - content = content[0:-1] - if extra != None: - log.write(" %s:%s:%s\n" % (type, extra, content)) - else: - log.write(" %s:%s\n\n" % (type, content)) - if error_msg != '': - log.write(" ----\n%s ----\n" % (error_msg)) - error_msg = '' - log.write("\n") - - return 0 - - -def runTestCases(case): - profile = case.prop('PROFILE') - if profile != None and \ - string.find(profile, "IBM XML Conformance Test Suite - Production") < 0: - print "=>", profile - test = case.children - while test != None: - if test.name == 'TEST': - runTest(test) - if test.name == 'TESTCASES': - runTestCases(test) - test = test.next - -conf = loadNoentDoc(CONF) -if conf == None: - print "Unable to load %s" % CONF - sys.exit(1) - -testsuite = conf.getRootElement() -if testsuite.name != 'TESTSUITE': - print "Expecting TESTSUITE root element: aborting" - sys.exit(1) - -profile = testsuite.prop('PROFILE') -if profile != None: - print profile - -start = time.time() - -case = testsuite.children -while case != None: - if case.name == 'TESTCASES': - old_test_nr = test_nr - old_test_succeed = test_succeed - old_test_failed = test_failed - old_test_error = test_error - runTestCases(case) - print " Ran %d tests: %d suceeded, %d failed and %d generated an error" % ( - test_nr - old_test_nr, test_succeed - old_test_succeed, - test_failed - old_test_failed, test_error - old_test_error) - case = case.next - -conf.freeDoc() -log.close() - -print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % ( - test_nr, test_succeed, test_failed, test_error, time.time() - start) |