11ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik#!/usr/bin/env python 21ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 31ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# 41ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# This is the MS subset of the W3C test suite for XML Schemas. 51ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# This file is generated from the MS W3c test suite description file. 61ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# 71ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 81ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikimport sys, os 91ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikimport exceptions, optparse 101ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikimport libxml2 111ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 121ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa = optparse.OptionParser() 131ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 141ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-b", "--base", action="store", type="string", dest="baseDir", 151ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default="", 161ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="""The base directory; i.e. the parent folder of the 171ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik "nisttest", "suntest" and "msxsdtest" directories.""") 181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 191ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-o", "--out", action="store", type="string", dest="logFile", 201ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default="test.log", 211ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="The filepath of the log file to be created") 221ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 231ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--log", action="store_true", dest="enableLog", 241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=False, 251ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Create the log file") 261ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 271ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--no-test-out", action="store_true", dest="disableTestStdOut", 281ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=False, 291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Don't output test results") 301ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 311ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-s", "--silent", action="store_true", dest="silent", default=False, 321ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Disables display of all tests") 331ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 341ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-v", "--verbose", action="store_true", dest="verbose", 351ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=False, 361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Displays all tests (only if --silent is not set)") 371ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 381ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-x", "--max", type="int", dest="maxTestCount", 391ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default="-1", 401ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="The maximum number of tests to be run") 411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 421ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-t", "--test", type="string", dest="singleTest", 431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=None, 441ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Runs the specified test only") 451ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 461ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--tsw", "--test-starts-with", type="string", dest="testStartsWith", 471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=None, 481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Runs the specified test(s), starting with the given string") 491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--rieo", "--report-internal-errors-only", action="store_true", 511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="reportInternalErrOnly", default=False, 521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Display erroneous tests of type 'internal' only") 531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--rueo", "--report-unimplemented-errors-only", action="store_true", 551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="reportUnimplErrOnly", default=False, 561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Display erroneous tests of type 'unimplemented' only") 571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--rmleo", "--report-mem-leak-errors-only", action="store_true", 591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="reportMemLeakErrOnly", default=False, 601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Display erroneous tests of type 'memory leak' only") 611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("-c", "--combines", type="string", dest="combines", 631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=None, 641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Combines to be run (all if omitted)") 651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--csw", "--csw", type="string", dest="combineStartsWith", 671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik default=None, 681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Combines to be run (all if omitted)") 691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--rc", "--report-combines", action="store_true", 711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="reportCombines", default=False, 721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Display combine reports") 731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--rec", "--report-err-combines", action="store_true", 751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="reportErrCombines", default=False, 761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Display erroneous combine reports only") 771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--debug", action="store_true", 791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="debugEnabled", default=False, 801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Displays debug messages") 811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikopa.add_option("--info", action="store_true", 831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dest="info", default=False, 841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik help="Displays info on the suite only. Does not run any test.") 8584a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcikopa.add_option("--sax", action="store_true", 8684a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik dest="validationSAX", default=False, 8784a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik help="Use SAX2-driven validation.") 8884a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcikopa.add_option("--tn", action="store_true", 8984a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik dest="displayTestName", default=False, 9084a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik help="Display the test name in every case.") 911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik(options, args) = opa.parse_args() 931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 941ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikif options.combines is not None: 951ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik options.combines = options.combines.split() 961ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 971ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik################################################ 981ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# The vars below are not intended to be changed. 991ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# 1001ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1011ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikmsgSchemaNotValidButShould = "The schema should be valid." 1021ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikmsgSchemaValidButShouldNot = "The schema should be invalid." 1031ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikmsgInstanceNotValidButShould = "The instance should be valid." 1041ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikmsgInstanceValidButShouldNot = "The instance should be invalid." 1051ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikvendorNIST = "NIST" 1061ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikvendorNIST_2 = "NIST-2" 1071ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikvendorSUN = "SUN" 1081ace20342ac2992b021d3db1bf64b394320a706cKasimier T. BuchcikvendorMS = "MS" 1091ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1101ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik################### 1111ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# Helper functions. 1121ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# 1131ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikvendor = None 1141ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1151ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikdef handleError(test, msg): 1161ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 1171ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 1181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.addLibLog("'%s' LIB: %s" % (test.name, msg)) 1191ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if msg.find("Unimplemented") > -1: 1201ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.failUnimplemented() 1211ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif msg.find("Internal") > -1: 1221ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.failInternal() 1231ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1251ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikdef fixFileNames(fileName): 1261ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (fileName is None) or (fileName == ""): 1271ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return "" 1281ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dirs = fileName.split("/") 1291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if dirs[1] != "Tests": 1301ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik fileName = os.path.join(".", "Tests") 1311ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik for dir in dirs[1:]: 1321ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik fileName = os.path.join(fileName, dir) 1331ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return fileName 1341ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1351ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikclass XSTCTestGroup: 1361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def __init__(self, name, schemaFileName, descr): 1371ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global vendor, vendorNIST_2 1381ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.name = name 1391ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.descr = descr 1401ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.mainSchema = True 1411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.schemaFileName = fixFileNames(schemaFileName) 1421ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.schemaParsed = False 1431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.schemaTried = False 1441ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1451ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def setSchema(self, schemaFileName, parsed): 1461ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not self.mainSchema: 1471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return 1481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.mainSchema = False 1491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.schemaParsed = parsed 1501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.schemaTried = True 1511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikclass XSTCTestCase: 1531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # <!-- groupName, Name, Accepted, File, Val, Descr 1551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def __init__(self, isSchema, groupName, name, accepted, file, val, descr): 1561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 1571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Constructor. 1591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.testRunner = None 1611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.isSchema = isSchema 1621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.groupName = groupName 1631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.name = name 1641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.accepted = accepted 1651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.fileName = fixFileNames(file) 1661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.val = val 1671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.descr = descr 1681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = False 1691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combineName = None 1701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log = [] 1721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.libLog = [] 1731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.initialMemUsed = 0 1741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.memLeak = 0 1751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.excepted = False 1761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.bad = False 1771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.unimplemented = False 1781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.internalErr = False 1791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.noSchemaErr = False 1801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = False 1811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Init the log. 1831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 1851ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if self.descr is not None: 1861ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' descr: %s\n" % (self.name, self.descr)) 1871ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' exp validity: %d\n" % (self.name, self.val)) 1881ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 1891ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def initTest(self, runner): 1901ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global vendorNIST, vendorSUN, vendorMS, vendorNIST_2, options, vendor 1911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Get the test-group. 1931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1941ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.runner = runner 1951ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.group = runner.getGroup(self.groupName) 1961ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if vendor == vendorMS or vendor == vendorSUN: 1971ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 1981ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Use the last given directory for the combine name. 1991ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2001ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik dirs = self.fileName.split("/") 2011ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combineName = dirs[len(dirs) -2] 2021ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif vendor == vendorNIST: 2031ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2041ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # NIST files are named in the following form: 2051ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # "NISTSchema-short-pattern-1.xsd" 2061ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2071ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik tokens = self.name.split("-") 2081ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combineName = tokens[1] 2091ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif vendor == vendorNIST_2: 2101ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2111ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Group-names have the form: "atomic-normalizedString-length-1" 2121ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2131ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik tokens = self.groupName.split("-") 2141ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combineName = "%s-%s" % (tokens[0], tokens[1]) 2151ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 2161ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combineName = "unkown" 2171ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik raise Exception("Could not compute the combine name of a test.") 2181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (not options.silent) and (self.group.descr is not None): 2191ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' group-descr: %s\n" % (self.name, self.group.descr)) 2201ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2211ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2221ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def addLibLog(self, msg): 2231ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik """This one is intended to be used by the error handler 2241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik function""" 2251ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2261ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2271ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.libLog.append(msg) 2281ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def fail(self, msg): 2301ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2311ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = True 2321ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2331ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' ( FAILED: %s\n" % (self.name, msg)) 2341ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2351ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def failNoSchema(self): 2361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2371ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = True 2381ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.noSchemaErr = True 2391ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2401ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' X NO-SCHEMA\n" % (self.name)) 2411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2421ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def failInternal(self): 2431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2441ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = True 2451ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.internalErr = True 2461ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' * INTERNAL\n" % self.name) 2481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def failUnimplemented(self): 2501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = True 2521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.unimplemented = True 2531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' ? UNIMPLEMENTED\n" % self.name) 2551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def failCritical(self, msg): 2571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = True 2591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.bad = True 2601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' ! BAD: %s\n" % (self.name, msg)) 2621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def failExcept(self, e): 2641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failed = True 2661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.excepted = True 2671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 2681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("'%s' # EXCEPTION: %s\n" % (self.name, e.__str__())) 2691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def setUp(self): 2711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Set up Libxml2. 2731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 2741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.initialMemUsed = libxml2.debugMemory(1) 2751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik libxml2.initParser() 2761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik libxml2.lineNumbersDefault(1) 2771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik libxml2.registerErrorHandler(handleError, self) 2781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def tearDown(self): 2801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik libxml2.schemaCleanupTypes() 2811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik libxml2.cleanupParser() 2821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.memLeak = libxml2.debugMemory(1) - self.initialMemUsed 2831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def isIOError(self, file, docType): 2851ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik err = None 2861ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 2871ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik err = libxml2.lastError() 2881ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik except: 2891ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Suppress exceptions. 2901ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik pass 2911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (err is None): 2921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return False 2931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if err.domain() == libxml2.XML_FROM_IO: 2941ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failCritical("failed to access the %s resource '%s'\n" % (docType, file)) 2951ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 2961ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def debugMsg(self, msg): 2971ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 2981ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.debugEnabled: 2991ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik sys.stdout.write("'%s' DEBUG: %s\n" % (self.name, msg)) 3001ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3011ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def finalize(self): 3021ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 3031ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik """Adds additional info to the log.""" 3041ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 3051ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Add libxml2 messages. 3061ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 3071ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 3081ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.extend(self.libLog) 3091ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 3101ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Add memory leaks. 3111ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 3121ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if self.memLeak != 0: 3131ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.log.append("%s + memory leak: %d bytes\n" % (self.name, self.memLeak)) 3141ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3151ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def run(self): 3161ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik """Runs a test.""" 3171ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 3181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3191ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik ##filePath = os.path.join(options.baseDir, self.fileName) 3201ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # filePath = "%s/%s/%s/%s" % (options.baseDir, self.test_Folder, self.schema_Folder, self.schema_File) 32184a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if options.displayTestName: 32284a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik sys.stdout.write("'%s'\n" % self.name) 3231ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 3241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.validate() 3251ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik except (Exception, libxml2.parserError, libxml2.treeError), e: 3261ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failExcept(e) 3271ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3281ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikdef parseSchema(fileName): 3291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik schema = None 3301ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik ctxt = libxml2.schemaNewParserCtxt(fileName) 3311ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 3321ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 3331ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik schema = ctxt.schemaParse() 3341ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik except: 3351ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik pass 3361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 3371ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik del ctxt 3381ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return schema 3391ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3401ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikclass XSTCSchemaTest(XSTCTestCase): 3421ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def __init__(self, groupName, name, accepted, file, val, descr): 3441ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik XSTCTestCase.__init__(self, 1, groupName, name, accepted, file, val, descr) 3451ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3461ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def validate(self): 3471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global msgSchemaNotValidButShould, msgSchemaValidButShouldNot 3481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik schema = None 3491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik filePath = self.fileName 3501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # os.path.join(options.baseDir, self.fileName) 3511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik valid = 0 3521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 3531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 3541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Parse the schema. 3551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 3561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("loading schema: %s" % filePath) 3571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik schema = parseSchema(filePath) 3581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("after loading schema") 3591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if schema is None: 3601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("schema is None") 3611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("checking for IO errors...") 3621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if self.isIOError(file, "schema"): 3631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return 3641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("checking schema result") 3651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (schema is None and self.val) or (schema is not None and self.val == 0): 3661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("schema result is BAD") 3671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (schema == None): 3681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.fail(msgSchemaNotValidButShould) 3691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 3701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.fail(msgSchemaValidButShouldNot) 3711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 3721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("schema result is OK") 3731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 3741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.group.setSchema(self.fileName, schema is not None) 3751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik del schema 3761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikclass XSTCInstanceTest(XSTCTestCase): 3781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def __init__(self, groupName, name, accepted, file, val, descr): 3801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik XSTCTestCase.__init__(self, 0, groupName, name, accepted, file, val, descr) 3811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def validate(self): 3831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik instance = None 3841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik schema = None 3851ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik filePath = self.fileName 3861ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # os.path.join(options.baseDir, self.fileName) 3871ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3881ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not self.group.schemaParsed and self.group.schemaTried: 3891ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.failNoSchema() 3901ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return 3911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 3921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.debugMsg("loading instance: %s" % filePath) 3931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik parserCtxt = libxml2.newParserCtxt() 3941ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (parserCtxt is None): 3951ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # TODO: Is this one necessary, or will an exception 3961ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # be already raised? 3971ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik raise Exception("Could not create the instance parser context.") 39884a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if not options.validationSAX: 3991ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 40084a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik try: 40184a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik instance = parserCtxt.ctxtReadFile(filePath, None, libxml2.XML_PARSE_NOWARNING) 40284a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik except: 40384a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik # Suppress exceptions. 40484a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik pass 40584a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik finally: 40684a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik del parserCtxt 40784a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("after loading instance") 40884a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if instance is None: 40984a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("instance is None") 41084a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.failCritical("Failed to parse the instance for unknown reasons.") 41184a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik return 41284a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik try: 41384a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik # 41484a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik # Validate the instance. 41584a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik # 41684a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("loading schema: %s" % self.group.schemaFileName) 41784a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik schema = parseSchema(self.group.schemaFileName) 4181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 41984a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik validationCtxt = schema.schemaNewValidCtxt() 42084a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik #validationCtxt = libxml2.schemaNewValidCtxt(None) 42184a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if (validationCtxt is None): 42284a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.failCritical("Could not create the validation context.") 42384a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik return 4241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 42584a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("validating instance") 42684a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if options.validationSAX: 42784a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik instance_Err = validationCtxt.schemaValidateFile(filePath, 0) 42884a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik else: 4291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik instance_Err = validationCtxt.schemaValidateDoc(instance) 43084a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("after instance validation") 43184a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("instance-err: %d" % instance_Err) 43284a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if (instance_Err != 0 and self.val == 1) or (instance_Err == 0 and self.val == 0): 43384a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("instance result is BAD") 43484a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if (instance_Err != 0): 43584a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.fail(msgInstanceNotValidButShould) 4361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 43784a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.fail(msgInstanceValidButShouldNot) 43884a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik 43984a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik else: 44084a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik self.debugMsg("instance result is OK") 4411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 44284a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik del validationCtxt 4431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 44484a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik del schema 44584a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik finally: 44684a56e313dfd2179d1205b565a8927c46a80dd34Kasimier T. Buchcik if instance is not None: 4471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik instance.freeDoc() 4481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik#################### 4511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# Test runner class. 4521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik# 4531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcikclass XSTCTestRunner: 4551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_TOTAL = 0 4571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_RAN = 1 4581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_SUCCEEDED = 2 4591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_FAILED = 3 4601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_UNIMPLEMENTED = 4 4611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_INTERNAL = 5 4621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_BAD = 6 4631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_EXCEPTED = 7 4641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_MEMLEAK = 8 4651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_NOSCHEMA = 9 4661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_NOTACCEPTED = 10 4671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik CNT_SCHEMA_TEST = 11 4681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def __init__(self): 4701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.logFile = None 4711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.counters = self.createCounters() 4721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.testList = [] 4731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combinesRan = {} 4741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.groups = {} 4751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.curGroup = None 4761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def createCounters(self): 4781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters = {self.CNT_TOTAL:0, self.CNT_RAN:0, self.CNT_SUCCEEDED:0, 4791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.CNT_FAILED:0, self.CNT_UNIMPLEMENTED:0, self.CNT_INTERNAL:0, self.CNT_BAD:0, 4801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.CNT_EXCEPTED:0, self.CNT_MEMLEAK:0, self.CNT_NOSCHEMA:0, self.CNT_NOTACCEPTED:0, 4811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.CNT_SCHEMA_TEST:0} 4821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return counters 4841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4851ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def addTest(self, test): 4861ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.testList.append(test) 4871ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.initTest(self) 4881ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4891ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def getGroup(self, groupName): 4901ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return self.groups[groupName] 4911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def addGroup(self, group): 4931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.groups[group.name] = group 4941ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 4951ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def updateCounters(self, test, counters): 4961ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.memLeak != 0: 4971ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_MEMLEAK] += 1 4981ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not test.failed: 4991ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_SUCCEEDED] +=1 5001ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.failed: 5011ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_FAILED] += 1 5021ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.bad: 5031ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_BAD] += 1 5041ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.unimplemented: 5051ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_UNIMPLEMENTED] += 1 5061ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.internalErr: 5071ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_INTERNAL] += 1 5081ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.noSchemaErr: 5091ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_NOSCHEMA] += 1 5101ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.excepted: 5111ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_EXCEPTED] += 1 5121ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not test.accepted: 5131ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_NOTACCEPTED] += 1 5141ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if test.isSchema: 5151ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_SCHEMA_TEST] += 1 5161ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return counters 5171ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def displayResults(self, out, all, combName, counters): 5191ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write("\n") 5201ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if all: 5211ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.combines is not None: 5221ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write("combine(s): %s\n" % str(options.combines)) 5231ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif combName is not None: 5241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write("combine : %s\n" % combName) 5251ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" total : %d\n" % counters[self.CNT_TOTAL]) 5261ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if all or options.combines is not None: 5271ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" ran : %d\n" % counters[self.CNT_RAN]) 5281ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" (schemata) : %d\n" % counters[self.CNT_SCHEMA_TEST]) 5291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # out.write(" succeeded : %d\n" % counters[self.CNT_SUCCEEDED]) 5301ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" not accepted : %d\n" % counters[self.CNT_NOTACCEPTED]) 5311ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_FAILED] > 0: 5321ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" failed : %d\n" % counters[self.CNT_FAILED]) 5331ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" -> internal : %d\n" % counters[self.CNT_INTERNAL]) 5341ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" -> unimpl. : %d\n" % counters[self.CNT_UNIMPLEMENTED]) 5351ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" -> skip-invalid-schema : %d\n" % counters[self.CNT_NOSCHEMA]) 5361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" -> bad : %d\n" % counters[self.CNT_BAD]) 5371ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" -> exceptions : %d\n" % counters[self.CNT_EXCEPTED]) 5381ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" memory leaks : %d\n" % counters[self.CNT_MEMLEAK]) 5391ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5401ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def displayShortResults(self, out, all, combName, counters): 5411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write("Ran %d of %d tests (%d schemata):" % (counters[self.CNT_RAN], 5421ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_TOTAL], counters[self.CNT_SCHEMA_TEST])) 5431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # out.write(" succeeded : %d\n" % counters[self.CNT_SUCCEEDED]) 5441ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_NOTACCEPTED] > 0: 5451ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d not accepted" % (counters[self.CNT_NOTACCEPTED])) 5461ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_FAILED] > 0 or counters[self.CNT_MEMLEAK] > 0: 5471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_FAILED] > 0: 5481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d failed" % (counters[self.CNT_FAILED])) 5491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" (") 5501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_INTERNAL] > 0: 5511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d internal" % (counters[self.CNT_INTERNAL])) 5521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_UNIMPLEMENTED] > 0: 5531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d unimplemented" % (counters[self.CNT_UNIMPLEMENTED])) 5541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_NOSCHEMA] > 0: 5551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d skip-invalid-schema" % (counters[self.CNT_NOSCHEMA])) 5561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_BAD] > 0: 5571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d bad" % (counters[self.CNT_BAD])) 5581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_EXCEPTED] > 0: 5591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d exception" % (counters[self.CNT_EXCEPTED])) 5601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" )") 5611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if counters[self.CNT_MEMLEAK] > 0: 5621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" %d leaks" % (counters[self.CNT_MEMLEAK])) 5631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write("\n") 5641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 5651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik out.write(" all passed\n") 5661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def reportCombine(self, combName): 5681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 5691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters = self.createCounters() 5711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 5721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Compute evaluation counters. 5731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 5741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik for test in self.combinesRan[combName]: 5751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_TOTAL] += 1 5761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters[self.CNT_RAN] += 1 5771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik counters = self.updateCounters(test, counters) 5781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.reportErrCombines and (counters[self.CNT_FAILED] == 0) and (counters[self.CNT_MEMLEAK] == 0): 5791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik pass 5801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 5811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.enableLog: 5821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayResults(self.logFile, False, combName, counters) 5831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayResults(sys.stdout, False, combName, counters) 5841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5851ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def displayTestLog(self, test): 5861ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik sys.stdout.writelines(test.log) 5871ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik sys.stdout.write("~~~~~~~~~~\n") 5881ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5891ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def reportTest(self, test): 5901ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 5911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 5921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik error = test.failed or test.memLeak != 0 5931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 5941ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Only erroneous tests will be written to the log, 5951ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # except @verbose is switched on. 5961ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 5971ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.enableLog and (options.verbose or error): 5981ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.logFile.writelines(test.log) 5991ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.logFile.write("~~~~~~~~~~\n") 6001ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6011ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # if not @silent, only erroneous tests will be 6021ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # written to stdout, except @verbose is switched on. 6031ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6041ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.silent: 6051ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.reportInternalErrOnly and test.internalErr: 6061ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayTestLog(test) 6071ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.reportMemLeakErrOnly and test.memLeak != 0: 6081ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayTestLog(test) 6091ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.reportUnimplErrOnly and test.unimplemented: 6101ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayTestLog(test) 6111ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (options.verbose or error) and (not options.reportInternalErrOnly) and (not options.reportMemLeakErrOnly) and (not options.reportUnimplErrOnly): 6121ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayTestLog(test) 6131ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6141ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6151ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def addToCombines(self, test): 6161ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik found = False 6171ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if self.combinesRan.has_key(test.combineName): 6181ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combinesRan[test.combineName].append(test) 6191ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 6201ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combinesRan[test.combineName] = [test] 6211ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6221ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik def run(self): 6231ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6241ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik global options 6251ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6261ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.info: 6271ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik for test in self.testList: 6281ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.addToCombines(test) 6291ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik sys.stdout.write("Combines: %d\n" % len(self.combinesRan)) 6301ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik sys.stdout.write("%s\n" % self.combinesRan.keys()) 6311ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik return 6321ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6331ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.enableLog: 6341ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.logFile = open(options.logFile, "w") 6351ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 6361ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik for test in self.testList: 6371ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.counters[self.CNT_TOTAL] += 1 6381ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6391ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Filter tests. 6401ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6411ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.singleTest is not None and options.singleTest != "": 6421ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if (test.name != options.singleTest): 6431ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik continue 6441ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif options.combines is not None: 6451ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not options.combines.__contains__(test.combineName): 6461ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik continue 6471ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif options.testStartsWith is not None: 6481ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not test.name.startswith(options.testStartsWith): 6491ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik continue 6501ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik elif options.combineStartsWith is not None: 6511ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if not test.combineName.startswith(options.combineStartsWith): 6521ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik continue 6531ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6541ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.maxTestCount != -1 and self.counters[self.CNT_RAN] >= options.maxTestCount: 6551ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik break 6561ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.counters[self.CNT_RAN] += 1 6571ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6581ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Run the thing, dammit. 6591ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6601ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 6611ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.setUp() 6621ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik try: 6631ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.run() 6641ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 6651ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.tearDown() 6661ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 6671ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6681ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Evaluate. 6691ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6701ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik test.finalize() 6711ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.reportTest(test) 6721ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.reportCombines or options.reportErrCombines: 6731ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.addToCombines(test) 6741ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.counters = self.updateCounters(test, self.counters) 6751ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik finally: 6761ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.reportCombines or options.reportErrCombines: 6771ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6781ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Build a report for every single combine. 6791ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6801ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # TODO: How to sort a dict? 6811ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6821ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.combinesRan.keys().sort(None) 6831ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik for key in self.combinesRan.keys(): 6841ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.reportCombine(key) 6851ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik 6861ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6871ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # Display the final report. 6881ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik # 6891ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik if options.silent: 6901ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayShortResults(sys.stdout, True, None, self.counters) 6911ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik else: 6921ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik sys.stdout.write("===========================\n") 6931ace20342ac2992b021d3db1bf64b394320a706cKasimier T. Buchcik self.displayResults(sys.stdout, True, None, self.counters) 694