diff options
Diffstat (limited to 'third_party/libxml/src/check-xinclude-test-suite.py')
-rwxr-xr-x | third_party/libxml/src/check-xinclude-test-suite.py | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/third_party/libxml/src/check-xinclude-test-suite.py b/third_party/libxml/src/check-xinclude-test-suite.py new file mode 100755 index 0000000..f470011 --- /dev/null +++ b/third_party/libxml/src/check-xinclude-test-suite.py @@ -0,0 +1,221 @@ +#!/usr/bin/python +import sys +import time +import os +import string +sys.path.insert(0, "python") +import libxml2 + +# +# the testsuite description +# +DIR="xinclude-test-suite" +CONF="testdescr.xml" +LOG="check-xinclude-test-suite.log" + +log = open(LOG, "w") + +os.chdir(DIR) + +test_nr = 0 +test_succeed = 0 +test_failed = 0 +test_error = 0 +# +# Error and warning handlers +# +error_nr = 0 +error_msg = '' + +def errorHandler(ctx, str): + global error_nr + global error_msg + + if string.find(str, "error:") >= 0: + 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) + +def testXInclude(filename, id): + global error_nr + global error_msg + global log + + error_nr = 0 + error_msg = '' + + print "testXInclude(%s, %s)" % (filename, id) + return 1 + +def runTest(test, basedir): + global test_nr + global test_failed + global test_error + global test_succeed + global error_msg + global log + + fatal_error = 0 + uri = test.prop('href') + id = test.prop('id') + type = test.prop('type') + if uri == None: + print "Test without ID:", uri + return -1 + if id == None: + print "Test without URI:", id + return -1 + if type == None: + print "Test without URI:", id + return -1 + if basedir != None: + URI = basedir + "/" + uri + else: + URI = uri + if os.access(URI, os.R_OK) == 0: + print "Test %s missing: base %s uri %s" % (URI, basedir, uri) + return -1 + + expected = None + outputfile = None + diff = None + if type != 'error': + output = test.xpathEval('string(output)') + if output == 'No output file.': + output = None + if output == '': + output = None + if output != None: + if basedir != None: + output = basedir + "/" + output + if os.access(output, os.R_OK) == 0: + print "Result for %s missing: %s" % (id, output) + output = None + else: + try: + f = open(output) + expected = f.read() + outputfile = output + except: + print "Result for %s unreadable: %s" % (id, output) + + try: + # print "testing %s" % (URI) + doc = libxml2.parseFile(URI) + except: + doc = None + if doc != None: + res = doc.xincludeProcess() + if res >= 0 and expected != None: + result = doc.serialize() + if result != expected: + print "Result for %s differs" % (id) + open("xinclude.res", "w").write(result) + diff = os.popen("diff %s xinclude.res" % outputfile).read() + + doc.freeDoc() + else: + print "Failed to parse %s" % (URI) + res = -1 + + + + test_nr = test_nr + 1 + if type == 'success': + if res > 0: + test_succeed = test_succeed + 1 + elif res == 0: + test_failed = test_failed + 1 + print "Test %s: no substitution done ???" % (id) + elif res < 0: + test_error = test_error + 1 + print "Test %s: failed valid XInclude processing" % (id) + elif type == 'error': + if res > 0: + test_error = test_error + 1 + print "Test %s: failed to detect invalid XInclude processing" % (id) + elif res == 0: + test_failed = test_failed + 1 + print "Test %s: Invalid but no substitution done" % (id) + elif res < 0: + test_succeed = test_succeed + 1 + elif type == 'optional': + if res > 0: + test_succeed = test_succeed + 1 + else: + print "Test %s: failed optional test" % (id) + + # Log the ontext + if res != 1: + log.write("Test ID %s\n" % (id)) + log.write(" File: %s\n" % (URI)) + content = string.strip(test.content) + while content[-1] == '\n': + content = content[0:-1] + log.write(" %s:%s\n\n" % (type, content)) + if error_msg != '': + log.write(" ----\n%s ----\n" % (error_msg)) + error_msg = '' + log.write("\n") + if diff != None: + log.write("diff from test %s:\n" %(id)) + log.write(" -----------\n%s\n -----------\n" % (diff)); + + return 0 + + +def runTestCases(case): + creator = case.prop('creator') + if creator != None: + print "=>", creator + base = case.getBase(None) + basedir = case.prop('basedir') + if basedir != None: + base = libxml2.buildURI(basedir, base) + test = case.children + while test != None: + if test.name == 'testcase': + runTest(test, base) + if test.name == 'testcases': + runTestCases(test) + test = test.next + +conf = libxml2.parseFile(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) |