Annotation of embedaddon/libxml2/check-xinclude-test-suite.py, revision 1.1

1.1     ! misho       1: #!/usr/bin/python
        !             2: import sys
        !             3: import time
        !             4: import os
        !             5: import string
        !             6: sys.path.insert(0, "python")
        !             7: import libxml2
        !             8: 
        !             9: #
        !            10: # the testsuite description
        !            11: #
        !            12: DIR="xinclude-test-suite"
        !            13: CONF="testdescr.xml"
        !            14: LOG="check-xinclude-test-suite.log"
        !            15: 
        !            16: log = open(LOG, "w")
        !            17: 
        !            18: os.chdir(DIR)
        !            19: 
        !            20: test_nr = 0
        !            21: test_succeed = 0
        !            22: test_failed = 0
        !            23: test_error = 0
        !            24: #
        !            25: # Error and warning handlers
        !            26: #
        !            27: error_nr = 0
        !            28: error_msg = ''
        !            29: 
        !            30: def errorHandler(ctx, str):
        !            31:     global error_nr
        !            32:     global error_msg
        !            33: 
        !            34:     if string.find(str, "error:") >= 0:
        !            35:        error_nr = error_nr + 1
        !            36:     if len(error_msg) < 300:
        !            37:         if len(error_msg) == 0 or error_msg[-1] == '\n':
        !            38:            error_msg = error_msg + "   >>" + str
        !            39:        else:
        !            40:            error_msg = error_msg + str
        !            41: 
        !            42: libxml2.registerErrorHandler(errorHandler, None)
        !            43: 
        !            44: def testXInclude(filename, id):
        !            45:     global error_nr
        !            46:     global error_msg
        !            47:     global log
        !            48: 
        !            49:     error_nr = 0
        !            50:     error_msg = ''
        !            51: 
        !            52:     print "testXInclude(%s, %s)" % (filename, id)
        !            53:     return 1
        !            54: 
        !            55: def runTest(test, basedir):
        !            56:     global test_nr
        !            57:     global test_failed
        !            58:     global test_error
        !            59:     global test_succeed
        !            60:     global error_msg
        !            61:     global log
        !            62: 
        !            63:     fatal_error = 0
        !            64:     uri = test.prop('href')
        !            65:     id = test.prop('id')
        !            66:     type = test.prop('type')
        !            67:     if uri == None:
        !            68:         print "Test without ID:", uri
        !            69:        return -1
        !            70:     if id == None:
        !            71:         print "Test without URI:", id
        !            72:        return -1
        !            73:     if type == None:
        !            74:         print "Test without URI:", id
        !            75:        return -1
        !            76:     if basedir != None:
        !            77:        URI = basedir + "/" + uri
        !            78:     else:
        !            79:         URI = uri
        !            80:     if os.access(URI, os.R_OK) == 0:
        !            81:         print "Test %s missing: base %s uri %s" % (URI, basedir, uri)
        !            82:        return -1
        !            83: 
        !            84:     expected = None
        !            85:     outputfile = None
        !            86:     diff = None
        !            87:     if type != 'error':
        !            88:        output = test.xpathEval('string(output)')
        !            89:        if output == 'No output file.':
        !            90:            output = None
        !            91:        if output == '':
        !            92:            output = None
        !            93:        if output != None:
        !            94:            if basedir != None:
        !            95:                output = basedir + "/" + output
        !            96:            if os.access(output, os.R_OK) == 0:
        !            97:                print "Result for %s missing: %s" % (id, output)
        !            98:                output = None
        !            99:            else:
        !           100:                try:
        !           101:                    f = open(output)
        !           102:                    expected = f.read()
        !           103:                    outputfile = output
        !           104:                except:
        !           105:                    print "Result for %s unreadable: %s" % (id, output)
        !           106: 
        !           107:     try:
        !           108:         # print "testing %s" % (URI)
        !           109:        doc = libxml2.parseFile(URI)
        !           110:     except:
        !           111:         doc = None
        !           112:     if doc != None:
        !           113:         res = doc.xincludeProcess()
        !           114:        if res >= 0 and expected != None:
        !           115:            result = doc.serialize()
        !           116:            if result != expected:
        !           117:                print "Result for %s differs" % (id)
        !           118:                open("xinclude.res", "w").write(result)
        !           119:                diff = os.popen("diff %s xinclude.res" % outputfile).read()
        !           120: 
        !           121:        doc.freeDoc()
        !           122:     else:
        !           123:         print "Failed to parse %s" % (URI)
        !           124:        res = -1
        !           125: 
        !           126:     
        !           127: 
        !           128:     test_nr = test_nr + 1
        !           129:     if type == 'success':
        !           130:        if res > 0:
        !           131:            test_succeed = test_succeed + 1
        !           132:        elif res == 0:
        !           133:            test_failed = test_failed + 1
        !           134:            print "Test %s: no substitution done ???" % (id)
        !           135:        elif res < 0:
        !           136:            test_error = test_error + 1
        !           137:            print "Test %s: failed valid XInclude processing" % (id)
        !           138:     elif type == 'error':
        !           139:        if res > 0:
        !           140:            test_error = test_error + 1
        !           141:            print "Test %s: failed to detect invalid XInclude processing" % (id)
        !           142:        elif res == 0:
        !           143:            test_failed = test_failed + 1
        !           144:            print "Test %s: Invalid but no substitution done" % (id)
        !           145:        elif res < 0:
        !           146:            test_succeed = test_succeed + 1
        !           147:     elif type == 'optional':
        !           148:        if res > 0:
        !           149:            test_succeed = test_succeed + 1
        !           150:        else:
        !           151:            print "Test %s: failed optional test" % (id)
        !           152: 
        !           153:     # Log the ontext
        !           154:     if res != 1:
        !           155:        log.write("Test ID %s\n" % (id))
        !           156:        log.write("   File: %s\n" % (URI))
        !           157:        content = string.strip(test.content)
        !           158:        while content[-1] == '\n':
        !           159:            content = content[0:-1]
        !           160:        log.write("   %s:%s\n\n" % (type, content))
        !           161:        if error_msg != '':
        !           162:            log.write("   ----\n%s   ----\n" % (error_msg))
        !           163:            error_msg = ''
        !           164:        log.write("\n")
        !           165:     if diff != None:
        !           166:         log.write("diff from test %s:\n" %(id))
        !           167:        log.write("   -----------\n%s\n   -----------\n" % (diff));
        !           168: 
        !           169:     return 0
        !           170:            
        !           171: 
        !           172: def runTestCases(case):
        !           173:     creator = case.prop('creator')
        !           174:     if creator != None:
        !           175:        print "=>", creator
        !           176:     base = case.getBase(None)
        !           177:     basedir = case.prop('basedir')
        !           178:     if basedir != None:
        !           179:        base = libxml2.buildURI(basedir, base)
        !           180:     test = case.children
        !           181:     while test != None:
        !           182:         if test.name == 'testcase':
        !           183:            runTest(test, base)
        !           184:        if test.name == 'testcases':
        !           185:            runTestCases(test)
        !           186:         test = test.next
        !           187:         
        !           188: conf = libxml2.parseFile(CONF)
        !           189: if conf == None:
        !           190:     print "Unable to load %s" % CONF
        !           191:     sys.exit(1)
        !           192: 
        !           193: testsuite = conf.getRootElement()
        !           194: if testsuite.name != 'testsuite':
        !           195:     print "Expecting TESTSUITE root element: aborting"
        !           196:     sys.exit(1)
        !           197: 
        !           198: profile = testsuite.prop('PROFILE')
        !           199: if profile != None:
        !           200:     print profile
        !           201: 
        !           202: start = time.time()
        !           203: 
        !           204: case = testsuite.children
        !           205: while case != None:
        !           206:     if case.name == 'testcases':
        !           207:        old_test_nr = test_nr
        !           208:        old_test_succeed = test_succeed
        !           209:        old_test_failed = test_failed
        !           210:        old_test_error = test_error
        !           211:         runTestCases(case)
        !           212:        print "   Ran %d tests: %d suceeded, %d failed and %d generated an error" % (
        !           213:               test_nr - old_test_nr, test_succeed - old_test_succeed,
        !           214:               test_failed - old_test_failed, test_error - old_test_error)
        !           215:     case = case.next
        !           216: 
        !           217: conf.freeDoc()
        !           218: log.close()
        !           219: 
        !           220: print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % (
        !           221:       test_nr, test_succeed, test_failed, test_error, time.time() - start)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>