mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-24 13:33:01 +03:00
Port some test scripts to Python 3
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
import sys
|
||||
import time
|
||||
import os
|
||||
import string
|
||||
sys.path.insert(0, "python")
|
||||
import libxml2
|
||||
|
||||
@@ -31,9 +30,9 @@ def errorHandler(ctx, str):
|
||||
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
|
||||
error_msg = error_msg + " >>" + str
|
||||
else:
|
||||
error_msg = error_msg + str
|
||||
|
||||
libxml2.registerErrorHandler(errorHandler, None)
|
||||
|
||||
@@ -53,17 +52,17 @@ libxml2.registerErrorHandler(errorHandler, None)
|
||||
#
|
||||
def loadNoentDoc(filename):
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return None
|
||||
ctxt.replaceEntities(1)
|
||||
ctxt.parseDocument()
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
doc = ctxt.doc()
|
||||
except:
|
||||
doc = None
|
||||
if ctxt.wellFormed() != 1:
|
||||
doc.freeDoc()
|
||||
return None
|
||||
return None
|
||||
return doc
|
||||
|
||||
#
|
||||
@@ -79,20 +78,20 @@ def testNotWf(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ret = ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
doc = ctxt.doc()
|
||||
except:
|
||||
doc = None
|
||||
if doc != None:
|
||||
doc.freeDoc()
|
||||
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
|
||||
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):
|
||||
@@ -104,21 +103,21 @@ def testNotWfEnt(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ctxt.replaceEntities(1)
|
||||
ret = ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
doc = ctxt.doc()
|
||||
except:
|
||||
doc = None
|
||||
if doc != None:
|
||||
doc.freeDoc()
|
||||
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
|
||||
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):
|
||||
@@ -130,22 +129,22 @@ def testNotWfEntDtd(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ctxt.replaceEntities(1)
|
||||
ctxt.loadSubset(1)
|
||||
ret = ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
doc = ctxt.doc()
|
||||
except:
|
||||
doc = None
|
||||
if doc != None:
|
||||
doc.freeDoc()
|
||||
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
|
||||
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):
|
||||
@@ -157,27 +156,27 @@ def testWfEntDtd(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ctxt.replaceEntities(1)
|
||||
ctxt.loadSubset(1)
|
||||
ret = ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
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 doc is 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
|
||||
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
|
||||
|
||||
@@ -190,26 +189,26 @@ def testError(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ctxt.replaceEntities(1)
|
||||
ctxt.loadSubset(1)
|
||||
ret = ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
doc = ctxt.doc()
|
||||
except:
|
||||
doc = None
|
||||
if doc != None:
|
||||
doc.freeDoc()
|
||||
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
|
||||
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
|
||||
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):
|
||||
@@ -221,31 +220,31 @@ def testInvalid(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ctxt.validate(1)
|
||||
ret = ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
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 doc is 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
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
@@ -257,30 +256,30 @@ def testValid(filename, id):
|
||||
error_msg = ''
|
||||
|
||||
ctxt = libxml2.createFileParserCtxt(filename)
|
||||
if ctxt == None:
|
||||
if ctxt is None:
|
||||
return -1
|
||||
ctxt.validate(1)
|
||||
ctxt.parseDocument()
|
||||
|
||||
try:
|
||||
doc = ctxt.doc()
|
||||
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 doc is 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
|
||||
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
|
||||
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
|
||||
|
||||
@@ -293,21 +292,21 @@ def runTest(test):
|
||||
|
||||
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
|
||||
if uri is None:
|
||||
print("Test without ID:", uri)
|
||||
return -1
|
||||
if id is 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
|
||||
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
|
||||
if type is None:
|
||||
print("Test %s missing TYPE" % (id))
|
||||
return -1
|
||||
|
||||
extra = None
|
||||
if type == "invalid":
|
||||
@@ -316,94 +315,94 @@ def runTest(test):
|
||||
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 "Unknown value %s for an ENTITIES test value" % (extra)
|
||||
# return -1
|
||||
# print(URI)
|
||||
#if extra is 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("Unknown value %s for an ENTITIES test value" % (extra))
|
||||
# return -1
|
||||
elif type == "error":
|
||||
res = testError(URI, id)
|
||||
res = testError(URI, id)
|
||||
else:
|
||||
# TODO skipped for now
|
||||
return -1
|
||||
return -1
|
||||
|
||||
test_nr = test_nr + 1
|
||||
if res > 0:
|
||||
test_succeed = test_succeed + 1
|
||||
test_succeed = test_succeed + 1
|
||||
elif res == 0:
|
||||
test_failed = test_failed + 1
|
||||
test_failed = test_failed + 1
|
||||
elif res < 0:
|
||||
test_error = test_error + 1
|
||||
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")
|
||||
log.write(" File: %s\n" % (URI))
|
||||
content = test.content.strip()
|
||||
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
|
||||
profile.find("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)
|
||||
runTest(test)
|
||||
if test.name == 'TESTCASES':
|
||||
runTestCases(test)
|
||||
test = test.next
|
||||
|
||||
|
||||
conf = loadNoentDoc(CONF)
|
||||
if conf == None:
|
||||
print "Unable to load %s" % CONF
|
||||
if conf is None:
|
||||
print("Unable to load %s" % CONF)
|
||||
sys.exit(1)
|
||||
|
||||
testsuite = conf.getRootElement()
|
||||
if testsuite.name != 'TESTSUITE':
|
||||
print "Expecting TESTSUITE root element: aborting"
|
||||
print("Expecting TESTSUITE root element: aborting")
|
||||
sys.exit(1)
|
||||
|
||||
profile = testsuite.prop('PROFILE')
|
||||
if profile != None:
|
||||
print profile
|
||||
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
|
||||
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 succeeded, %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)
|
||||
print(" Ran %d tests: %d succeeded, %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 succeeded, %d failed and %d generated an error in %.2f s." % (
|
||||
test_nr, test_succeed, test_failed, test_error, time.time() - start)
|
||||
print("Ran %d tests: %d succeeded, %d failed and %d generated an error in %.2f s." % (
|
||||
test_nr, test_succeed, test_failed, test_error, time.time() - start))
|
||||
|
||||
Reference in New Issue
Block a user