⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 check-xml-test-suite.py

📁 xml开源解析代码.版本为libxml2-2.6.29,可支持GB3212.网络消息发送XML时很有用.
💻 PY
字号:
#!/usr/bin/pythonimport sysimport timeimport osimport stringsys.path.insert(0, "python")import libxml2test_nr = 0test_succeed = 0test_failed = 0test_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 = 0error_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 + strlibxml2.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 1def 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 1def 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 1def 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 1def 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 1def 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 1def 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 1def 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 profilestart = time.time()case = testsuite.childrenwhile 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.nextconf.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)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -