1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6777b538SAndroid Build Coastguard Workerimport sys 3*6777b538SAndroid Build Coastguard Workerimport time 4*6777b538SAndroid Build Coastguard Workerimport os 5*6777b538SAndroid Build Coastguard Workersys.path.insert(0, "python") 6*6777b538SAndroid Build Coastguard Workerimport libxml2 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Workertest_nr = 0 9*6777b538SAndroid Build Coastguard Workertest_succeed = 0 10*6777b538SAndroid Build Coastguard Workertest_failed = 0 11*6777b538SAndroid Build Coastguard Workertest_error = 0 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker# 14*6777b538SAndroid Build Coastguard Worker# the testsuite description 15*6777b538SAndroid Build Coastguard Worker# 16*6777b538SAndroid Build Coastguard WorkerCONF="xml-test-suite/xmlconf/xmlconf.xml" 17*6777b538SAndroid Build Coastguard WorkerLOG="check-xml-test-suite.log" 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Workerlog = open(LOG, "w") 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker# 22*6777b538SAndroid Build Coastguard Worker# Error and warning handlers 23*6777b538SAndroid Build Coastguard Worker# 24*6777b538SAndroid Build Coastguard Workererror_nr = 0 25*6777b538SAndroid Build Coastguard Workererror_msg = '' 26*6777b538SAndroid Build Coastguard Workerdef errorHandler(ctx, str): 27*6777b538SAndroid Build Coastguard Worker global error_nr 28*6777b538SAndroid Build Coastguard Worker global error_msg 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker error_nr = error_nr + 1 31*6777b538SAndroid Build Coastguard Worker if len(error_msg) < 300: 32*6777b538SAndroid Build Coastguard Worker if len(error_msg) == 0 or error_msg[-1] == '\n': 33*6777b538SAndroid Build Coastguard Worker error_msg = error_msg + " >>" + str 34*6777b538SAndroid Build Coastguard Worker else: 35*6777b538SAndroid Build Coastguard Worker error_msg = error_msg + str 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Workerlibxml2.registerErrorHandler(errorHandler, None) 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker#warning_nr = 0 40*6777b538SAndroid Build Coastguard Worker#warning = '' 41*6777b538SAndroid Build Coastguard Worker#def warningHandler(ctx, str): 42*6777b538SAndroid Build Coastguard Worker# global warning_nr 43*6777b538SAndroid Build Coastguard Worker# global warning 44*6777b538SAndroid Build Coastguard Worker# 45*6777b538SAndroid Build Coastguard Worker# warning_nr = warning_nr + 1 46*6777b538SAndroid Build Coastguard Worker# warning = warning + str 47*6777b538SAndroid Build Coastguard Worker# 48*6777b538SAndroid Build Coastguard Worker#libxml2.registerWarningHandler(warningHandler, None) 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker# 51*6777b538SAndroid Build Coastguard Worker# Used to load the XML testsuite description 52*6777b538SAndroid Build Coastguard Worker# 53*6777b538SAndroid Build Coastguard Workerdef loadNoentDoc(filename): 54*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 55*6777b538SAndroid Build Coastguard Worker if ctxt is None: 56*6777b538SAndroid Build Coastguard Worker return None 57*6777b538SAndroid Build Coastguard Worker ctxt.replaceEntities(1) 58*6777b538SAndroid Build Coastguard Worker ctxt.parseDocument() 59*6777b538SAndroid Build Coastguard Worker try: 60*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 61*6777b538SAndroid Build Coastguard Worker except: 62*6777b538SAndroid Build Coastguard Worker doc = None 63*6777b538SAndroid Build Coastguard Worker if ctxt.wellFormed() != 1: 64*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 65*6777b538SAndroid Build Coastguard Worker return None 66*6777b538SAndroid Build Coastguard Worker return doc 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker# 69*6777b538SAndroid Build Coastguard Worker# The conformance testing routines 70*6777b538SAndroid Build Coastguard Worker# 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Workerdef testNotWf(filename, id): 73*6777b538SAndroid Build Coastguard Worker global error_nr 74*6777b538SAndroid Build Coastguard Worker global error_msg 75*6777b538SAndroid Build Coastguard Worker global log 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker error_nr = 0 78*6777b538SAndroid Build Coastguard Worker error_msg = '' 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 81*6777b538SAndroid Build Coastguard Worker if ctxt is None: 82*6777b538SAndroid Build Coastguard Worker return -1 83*6777b538SAndroid Build Coastguard Worker ret = ctxt.parseDocument() 84*6777b538SAndroid Build Coastguard Worker 85*6777b538SAndroid Build Coastguard Worker try: 86*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 87*6777b538SAndroid Build Coastguard Worker except: 88*6777b538SAndroid Build Coastguard Worker doc = None 89*6777b538SAndroid Build Coastguard Worker if doc != None: 90*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 91*6777b538SAndroid Build Coastguard Worker if ret == 0 or ctxt.wellFormed() != 0: 92*6777b538SAndroid Build Coastguard Worker print("%s: error: Well Formedness error not detected" % (id)) 93*6777b538SAndroid Build Coastguard Worker log.write("%s: error: Well Formedness error not detected\n" % (id)) 94*6777b538SAndroid Build Coastguard Worker return 0 95*6777b538SAndroid Build Coastguard Worker return 1 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Workerdef testNotWfEnt(filename, id): 98*6777b538SAndroid Build Coastguard Worker global error_nr 99*6777b538SAndroid Build Coastguard Worker global error_msg 100*6777b538SAndroid Build Coastguard Worker global log 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Worker error_nr = 0 103*6777b538SAndroid Build Coastguard Worker error_msg = '' 104*6777b538SAndroid Build Coastguard Worker 105*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 106*6777b538SAndroid Build Coastguard Worker if ctxt is None: 107*6777b538SAndroid Build Coastguard Worker return -1 108*6777b538SAndroid Build Coastguard Worker ctxt.replaceEntities(1) 109*6777b538SAndroid Build Coastguard Worker ret = ctxt.parseDocument() 110*6777b538SAndroid Build Coastguard Worker 111*6777b538SAndroid Build Coastguard Worker try: 112*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 113*6777b538SAndroid Build Coastguard Worker except: 114*6777b538SAndroid Build Coastguard Worker doc = None 115*6777b538SAndroid Build Coastguard Worker if doc != None: 116*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 117*6777b538SAndroid Build Coastguard Worker if ret == 0 or ctxt.wellFormed() != 0: 118*6777b538SAndroid Build Coastguard Worker print("%s: error: Well Formedness error not detected" % (id)) 119*6777b538SAndroid Build Coastguard Worker log.write("%s: error: Well Formedness error not detected\n" % (id)) 120*6777b538SAndroid Build Coastguard Worker return 0 121*6777b538SAndroid Build Coastguard Worker return 1 122*6777b538SAndroid Build Coastguard Worker 123*6777b538SAndroid Build Coastguard Workerdef testNotWfEntDtd(filename, id): 124*6777b538SAndroid Build Coastguard Worker global error_nr 125*6777b538SAndroid Build Coastguard Worker global error_msg 126*6777b538SAndroid Build Coastguard Worker global log 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard Worker error_nr = 0 129*6777b538SAndroid Build Coastguard Worker error_msg = '' 130*6777b538SAndroid Build Coastguard Worker 131*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 132*6777b538SAndroid Build Coastguard Worker if ctxt is None: 133*6777b538SAndroid Build Coastguard Worker return -1 134*6777b538SAndroid Build Coastguard Worker ctxt.replaceEntities(1) 135*6777b538SAndroid Build Coastguard Worker ctxt.loadSubset(1) 136*6777b538SAndroid Build Coastguard Worker ret = ctxt.parseDocument() 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker try: 139*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 140*6777b538SAndroid Build Coastguard Worker except: 141*6777b538SAndroid Build Coastguard Worker doc = None 142*6777b538SAndroid Build Coastguard Worker if doc != None: 143*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 144*6777b538SAndroid Build Coastguard Worker if ret == 0 or ctxt.wellFormed() != 0: 145*6777b538SAndroid Build Coastguard Worker print("%s: error: Well Formedness error not detected" % (id)) 146*6777b538SAndroid Build Coastguard Worker log.write("%s: error: Well Formedness error not detected\n" % (id)) 147*6777b538SAndroid Build Coastguard Worker return 0 148*6777b538SAndroid Build Coastguard Worker return 1 149*6777b538SAndroid Build Coastguard Worker 150*6777b538SAndroid Build Coastguard Workerdef testWfEntDtd(filename, id): 151*6777b538SAndroid Build Coastguard Worker global error_nr 152*6777b538SAndroid Build Coastguard Worker global error_msg 153*6777b538SAndroid Build Coastguard Worker global log 154*6777b538SAndroid Build Coastguard Worker 155*6777b538SAndroid Build Coastguard Worker error_nr = 0 156*6777b538SAndroid Build Coastguard Worker error_msg = '' 157*6777b538SAndroid Build Coastguard Worker 158*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 159*6777b538SAndroid Build Coastguard Worker if ctxt is None: 160*6777b538SAndroid Build Coastguard Worker return -1 161*6777b538SAndroid Build Coastguard Worker ctxt.replaceEntities(1) 162*6777b538SAndroid Build Coastguard Worker ctxt.loadSubset(1) 163*6777b538SAndroid Build Coastguard Worker ret = ctxt.parseDocument() 164*6777b538SAndroid Build Coastguard Worker 165*6777b538SAndroid Build Coastguard Worker try: 166*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 167*6777b538SAndroid Build Coastguard Worker except: 168*6777b538SAndroid Build Coastguard Worker doc = None 169*6777b538SAndroid Build Coastguard Worker if doc is None or ret != 0 or ctxt.wellFormed() == 0: 170*6777b538SAndroid Build Coastguard Worker print("%s: error: wrongly failed to parse the document" % (id)) 171*6777b538SAndroid Build Coastguard Worker log.write("%s: error: wrongly failed to parse the document\n" % (id)) 172*6777b538SAndroid Build Coastguard Worker if doc != None: 173*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 174*6777b538SAndroid Build Coastguard Worker return 0 175*6777b538SAndroid Build Coastguard Worker if error_nr != 0: 176*6777b538SAndroid Build Coastguard Worker print("%s: warning: WF document generated an error msg" % (id)) 177*6777b538SAndroid Build Coastguard Worker log.write("%s: error: WF document generated an error msg\n" % (id)) 178*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 179*6777b538SAndroid Build Coastguard Worker return 2 180*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 181*6777b538SAndroid Build Coastguard Worker return 1 182*6777b538SAndroid Build Coastguard Worker 183*6777b538SAndroid Build Coastguard Workerdef testError(filename, id): 184*6777b538SAndroid Build Coastguard Worker global error_nr 185*6777b538SAndroid Build Coastguard Worker global error_msg 186*6777b538SAndroid Build Coastguard Worker global log 187*6777b538SAndroid Build Coastguard Worker 188*6777b538SAndroid Build Coastguard Worker error_nr = 0 189*6777b538SAndroid Build Coastguard Worker error_msg = '' 190*6777b538SAndroid Build Coastguard Worker 191*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 192*6777b538SAndroid Build Coastguard Worker if ctxt is None: 193*6777b538SAndroid Build Coastguard Worker return -1 194*6777b538SAndroid Build Coastguard Worker ctxt.replaceEntities(1) 195*6777b538SAndroid Build Coastguard Worker ctxt.loadSubset(1) 196*6777b538SAndroid Build Coastguard Worker ret = ctxt.parseDocument() 197*6777b538SAndroid Build Coastguard Worker 198*6777b538SAndroid Build Coastguard Worker try: 199*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 200*6777b538SAndroid Build Coastguard Worker except: 201*6777b538SAndroid Build Coastguard Worker doc = None 202*6777b538SAndroid Build Coastguard Worker if doc != None: 203*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 204*6777b538SAndroid Build Coastguard Worker if ctxt.wellFormed() == 0: 205*6777b538SAndroid Build Coastguard Worker print("%s: warning: failed to parse the document but accepted" % (id)) 206*6777b538SAndroid Build Coastguard Worker log.write("%s: warning: failed to parse the document but accepte\n" % (id)) 207*6777b538SAndroid Build Coastguard Worker return 2 208*6777b538SAndroid Build Coastguard Worker if error_nr != 0: 209*6777b538SAndroid Build Coastguard Worker print("%s: warning: WF document generated an error msg" % (id)) 210*6777b538SAndroid Build Coastguard Worker log.write("%s: error: WF document generated an error msg\n" % (id)) 211*6777b538SAndroid Build Coastguard Worker return 2 212*6777b538SAndroid Build Coastguard Worker return 1 213*6777b538SAndroid Build Coastguard Worker 214*6777b538SAndroid Build Coastguard Workerdef testInvalid(filename, id): 215*6777b538SAndroid Build Coastguard Worker global error_nr 216*6777b538SAndroid Build Coastguard Worker global error_msg 217*6777b538SAndroid Build Coastguard Worker global log 218*6777b538SAndroid Build Coastguard Worker 219*6777b538SAndroid Build Coastguard Worker error_nr = 0 220*6777b538SAndroid Build Coastguard Worker error_msg = '' 221*6777b538SAndroid Build Coastguard Worker 222*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 223*6777b538SAndroid Build Coastguard Worker if ctxt is None: 224*6777b538SAndroid Build Coastguard Worker return -1 225*6777b538SAndroid Build Coastguard Worker ctxt.validate(1) 226*6777b538SAndroid Build Coastguard Worker ret = ctxt.parseDocument() 227*6777b538SAndroid Build Coastguard Worker 228*6777b538SAndroid Build Coastguard Worker try: 229*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 230*6777b538SAndroid Build Coastguard Worker except: 231*6777b538SAndroid Build Coastguard Worker doc = None 232*6777b538SAndroid Build Coastguard Worker valid = ctxt.isValid() 233*6777b538SAndroid Build Coastguard Worker if doc is None: 234*6777b538SAndroid Build Coastguard Worker print("%s: error: wrongly failed to parse the document" % (id)) 235*6777b538SAndroid Build Coastguard Worker log.write("%s: error: wrongly failed to parse the document\n" % (id)) 236*6777b538SAndroid Build Coastguard Worker return 0 237*6777b538SAndroid Build Coastguard Worker if valid == 1: 238*6777b538SAndroid Build Coastguard Worker print("%s: error: Validity error not detected" % (id)) 239*6777b538SAndroid Build Coastguard Worker log.write("%s: error: Validity error not detected\n" % (id)) 240*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 241*6777b538SAndroid Build Coastguard Worker return 0 242*6777b538SAndroid Build Coastguard Worker if error_nr == 0: 243*6777b538SAndroid Build Coastguard Worker print("%s: warning: Validity error not reported" % (id)) 244*6777b538SAndroid Build Coastguard Worker log.write("%s: warning: Validity error not reported\n" % (id)) 245*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 246*6777b538SAndroid Build Coastguard Worker return 2 247*6777b538SAndroid Build Coastguard Worker 248*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 249*6777b538SAndroid Build Coastguard Worker return 1 250*6777b538SAndroid Build Coastguard Worker 251*6777b538SAndroid Build Coastguard Workerdef testValid(filename, id): 252*6777b538SAndroid Build Coastguard Worker global error_nr 253*6777b538SAndroid Build Coastguard Worker global error_msg 254*6777b538SAndroid Build Coastguard Worker 255*6777b538SAndroid Build Coastguard Worker error_nr = 0 256*6777b538SAndroid Build Coastguard Worker error_msg = '' 257*6777b538SAndroid Build Coastguard Worker 258*6777b538SAndroid Build Coastguard Worker ctxt = libxml2.createFileParserCtxt(filename) 259*6777b538SAndroid Build Coastguard Worker if ctxt is None: 260*6777b538SAndroid Build Coastguard Worker return -1 261*6777b538SAndroid Build Coastguard Worker ctxt.validate(1) 262*6777b538SAndroid Build Coastguard Worker ctxt.parseDocument() 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard Worker try: 265*6777b538SAndroid Build Coastguard Worker doc = ctxt.doc() 266*6777b538SAndroid Build Coastguard Worker except: 267*6777b538SAndroid Build Coastguard Worker doc = None 268*6777b538SAndroid Build Coastguard Worker valid = ctxt.isValid() 269*6777b538SAndroid Build Coastguard Worker if doc is None: 270*6777b538SAndroid Build Coastguard Worker print("%s: error: wrongly failed to parse the document" % (id)) 271*6777b538SAndroid Build Coastguard Worker log.write("%s: error: wrongly failed to parse the document\n" % (id)) 272*6777b538SAndroid Build Coastguard Worker return 0 273*6777b538SAndroid Build Coastguard Worker if valid != 1: 274*6777b538SAndroid Build Coastguard Worker print("%s: error: Validity check failed" % (id)) 275*6777b538SAndroid Build Coastguard Worker log.write("%s: error: Validity check failed\n" % (id)) 276*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 277*6777b538SAndroid Build Coastguard Worker return 0 278*6777b538SAndroid Build Coastguard Worker if error_nr != 0 or valid != 1: 279*6777b538SAndroid Build Coastguard Worker print("%s: warning: valid document reported an error" % (id)) 280*6777b538SAndroid Build Coastguard Worker log.write("%s: warning: valid document reported an error\n" % (id)) 281*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 282*6777b538SAndroid Build Coastguard Worker return 2 283*6777b538SAndroid Build Coastguard Worker doc.freeDoc() 284*6777b538SAndroid Build Coastguard Worker return 1 285*6777b538SAndroid Build Coastguard Worker 286*6777b538SAndroid Build Coastguard Workerdef runTest(test): 287*6777b538SAndroid Build Coastguard Worker global test_nr 288*6777b538SAndroid Build Coastguard Worker global test_succeed 289*6777b538SAndroid Build Coastguard Worker global test_failed 290*6777b538SAndroid Build Coastguard Worker global error_msg 291*6777b538SAndroid Build Coastguard Worker global log 292*6777b538SAndroid Build Coastguard Worker 293*6777b538SAndroid Build Coastguard Worker uri = test.prop('URI') 294*6777b538SAndroid Build Coastguard Worker id = test.prop('ID') 295*6777b538SAndroid Build Coastguard Worker if uri is None: 296*6777b538SAndroid Build Coastguard Worker print("Test without ID:", uri) 297*6777b538SAndroid Build Coastguard Worker return -1 298*6777b538SAndroid Build Coastguard Worker if id is None: 299*6777b538SAndroid Build Coastguard Worker print("Test without URI:", id) 300*6777b538SAndroid Build Coastguard Worker return -1 301*6777b538SAndroid Build Coastguard Worker base = test.getBase(None) 302*6777b538SAndroid Build Coastguard Worker URI = libxml2.buildURI(uri, base) 303*6777b538SAndroid Build Coastguard Worker if os.access(URI, os.R_OK) == 0: 304*6777b538SAndroid Build Coastguard Worker print("Test %s missing: base %s uri %s" % (URI, base, uri)) 305*6777b538SAndroid Build Coastguard Worker return -1 306*6777b538SAndroid Build Coastguard Worker type = test.prop('TYPE') 307*6777b538SAndroid Build Coastguard Worker if type is None: 308*6777b538SAndroid Build Coastguard Worker print("Test %s missing TYPE" % (id)) 309*6777b538SAndroid Build Coastguard Worker return -1 310*6777b538SAndroid Build Coastguard Worker 311*6777b538SAndroid Build Coastguard Worker extra = None 312*6777b538SAndroid Build Coastguard Worker if type == "invalid": 313*6777b538SAndroid Build Coastguard Worker res = testInvalid(URI, id) 314*6777b538SAndroid Build Coastguard Worker elif type == "valid": 315*6777b538SAndroid Build Coastguard Worker res = testValid(URI, id) 316*6777b538SAndroid Build Coastguard Worker elif type == "not-wf": 317*6777b538SAndroid Build Coastguard Worker extra = test.prop('ENTITIES') 318*6777b538SAndroid Build Coastguard Worker # print(URI) 319*6777b538SAndroid Build Coastguard Worker #if extra is None: 320*6777b538SAndroid Build Coastguard Worker # res = testNotWfEntDtd(URI, id) 321*6777b538SAndroid Build Coastguard Worker #elif extra == 'none': 322*6777b538SAndroid Build Coastguard Worker # res = testNotWf(URI, id) 323*6777b538SAndroid Build Coastguard Worker #elif extra == 'general': 324*6777b538SAndroid Build Coastguard Worker # res = testNotWfEnt(URI, id) 325*6777b538SAndroid Build Coastguard Worker #elif extra == 'both' or extra == 'parameter': 326*6777b538SAndroid Build Coastguard Worker res = testNotWfEntDtd(URI, id) 327*6777b538SAndroid Build Coastguard Worker #else: 328*6777b538SAndroid Build Coastguard Worker # print("Unknown value %s for an ENTITIES test value" % (extra)) 329*6777b538SAndroid Build Coastguard Worker # return -1 330*6777b538SAndroid Build Coastguard Worker elif type == "error": 331*6777b538SAndroid Build Coastguard Worker res = testError(URI, id) 332*6777b538SAndroid Build Coastguard Worker else: 333*6777b538SAndroid Build Coastguard Worker # TODO skipped for now 334*6777b538SAndroid Build Coastguard Worker return -1 335*6777b538SAndroid Build Coastguard Worker 336*6777b538SAndroid Build Coastguard Worker test_nr = test_nr + 1 337*6777b538SAndroid Build Coastguard Worker if res > 0: 338*6777b538SAndroid Build Coastguard Worker test_succeed = test_succeed + 1 339*6777b538SAndroid Build Coastguard Worker elif res == 0: 340*6777b538SAndroid Build Coastguard Worker test_failed = test_failed + 1 341*6777b538SAndroid Build Coastguard Worker elif res < 0: 342*6777b538SAndroid Build Coastguard Worker test_error = test_error + 1 343*6777b538SAndroid Build Coastguard Worker 344*6777b538SAndroid Build Coastguard Worker # Log the ontext 345*6777b538SAndroid Build Coastguard Worker if res != 1: 346*6777b538SAndroid Build Coastguard Worker log.write(" File: %s\n" % (URI)) 347*6777b538SAndroid Build Coastguard Worker content = test.content.strip() 348*6777b538SAndroid Build Coastguard Worker while content[-1] == '\n': 349*6777b538SAndroid Build Coastguard Worker content = content[0:-1] 350*6777b538SAndroid Build Coastguard Worker if extra != None: 351*6777b538SAndroid Build Coastguard Worker log.write(" %s:%s:%s\n" % (type, extra, content)) 352*6777b538SAndroid Build Coastguard Worker else: 353*6777b538SAndroid Build Coastguard Worker log.write(" %s:%s\n\n" % (type, content)) 354*6777b538SAndroid Build Coastguard Worker if error_msg != '': 355*6777b538SAndroid Build Coastguard Worker log.write(" ----\n%s ----\n" % (error_msg)) 356*6777b538SAndroid Build Coastguard Worker error_msg = '' 357*6777b538SAndroid Build Coastguard Worker log.write("\n") 358*6777b538SAndroid Build Coastguard Worker 359*6777b538SAndroid Build Coastguard Worker return 0 360*6777b538SAndroid Build Coastguard Worker 361*6777b538SAndroid Build Coastguard Worker 362*6777b538SAndroid Build Coastguard Workerdef runTestCases(case): 363*6777b538SAndroid Build Coastguard Worker profile = case.prop('PROFILE') 364*6777b538SAndroid Build Coastguard Worker if profile != None and \ 365*6777b538SAndroid Build Coastguard Worker profile.find("IBM XML Conformance Test Suite - Production") < 0: 366*6777b538SAndroid Build Coastguard Worker print("=>", profile) 367*6777b538SAndroid Build Coastguard Worker test = case.children 368*6777b538SAndroid Build Coastguard Worker while test != None: 369*6777b538SAndroid Build Coastguard Worker if test.name == 'TEST': 370*6777b538SAndroid Build Coastguard Worker runTest(test) 371*6777b538SAndroid Build Coastguard Worker if test.name == 'TESTCASES': 372*6777b538SAndroid Build Coastguard Worker runTestCases(test) 373*6777b538SAndroid Build Coastguard Worker test = test.next 374*6777b538SAndroid Build Coastguard Worker 375*6777b538SAndroid Build Coastguard Workerconf = loadNoentDoc(CONF) 376*6777b538SAndroid Build Coastguard Workerif conf is None: 377*6777b538SAndroid Build Coastguard Worker print("Unable to load %s" % CONF) 378*6777b538SAndroid Build Coastguard Worker sys.exit(1) 379*6777b538SAndroid Build Coastguard Worker 380*6777b538SAndroid Build Coastguard Workertestsuite = conf.getRootElement() 381*6777b538SAndroid Build Coastguard Workerif testsuite.name != 'TESTSUITE': 382*6777b538SAndroid Build Coastguard Worker print("Expecting TESTSUITE root element: aborting") 383*6777b538SAndroid Build Coastguard Worker sys.exit(1) 384*6777b538SAndroid Build Coastguard Worker 385*6777b538SAndroid Build Coastguard Workerprofile = testsuite.prop('PROFILE') 386*6777b538SAndroid Build Coastguard Workerif profile != None: 387*6777b538SAndroid Build Coastguard Worker print(profile) 388*6777b538SAndroid Build Coastguard Worker 389*6777b538SAndroid Build Coastguard Workerstart = time.time() 390*6777b538SAndroid Build Coastguard Worker 391*6777b538SAndroid Build Coastguard Workercase = testsuite.children 392*6777b538SAndroid Build Coastguard Workerwhile case != None: 393*6777b538SAndroid Build Coastguard Worker if case.name == 'TESTCASES': 394*6777b538SAndroid Build Coastguard Worker old_test_nr = test_nr 395*6777b538SAndroid Build Coastguard Worker old_test_succeed = test_succeed 396*6777b538SAndroid Build Coastguard Worker old_test_failed = test_failed 397*6777b538SAndroid Build Coastguard Worker old_test_error = test_error 398*6777b538SAndroid Build Coastguard Worker runTestCases(case) 399*6777b538SAndroid Build Coastguard Worker print(" Ran %d tests: %d succeeded, %d failed and %d generated an error" % ( 400*6777b538SAndroid Build Coastguard Worker test_nr - old_test_nr, test_succeed - old_test_succeed, 401*6777b538SAndroid Build Coastguard Worker test_failed - old_test_failed, test_error - old_test_error)) 402*6777b538SAndroid Build Coastguard Worker case = case.next 403*6777b538SAndroid Build Coastguard Worker 404*6777b538SAndroid Build Coastguard Workerconf.freeDoc() 405*6777b538SAndroid Build Coastguard Workerlog.close() 406*6777b538SAndroid Build Coastguard Worker 407*6777b538SAndroid Build Coastguard Workerprint("Ran %d tests: %d succeeded, %d failed and %d generated an error in %.2f s." % ( 408*6777b538SAndroid Build Coastguard Worker test_nr, test_succeed, test_failed, test_error, time.time() - start)) 409