blob: 4ca0990390331f8fd31413f7bcb73135bdd293c1 [file] [log] [blame]
import os
import xml.etree.ElementTree as ET
def open_test_results(directory):
xmls = []
for root, _, files in os.walk(directory):
for file in files:
if file.endswith(".xml"):
tree = ET.parse(f"{root}/{file}")
xmls.append(tree)
return xmls
def get_testcases(xmls):
testcases = []
for xml in xmls:
root = xml.getroot()
testcases.extend(list(root.iter("testcase")))
return testcases
def find(testcase, condition):
children = list(testcase.iter())
assert children[0] is testcase
children = children[1:]
return condition(children)
def skipped_test(testcase):
def condition(children):
tags = [child.tag for child in children]
if "skipped" in tags:
return True
return False
return find(testcase, condition)
def passed_test(testcase):
def condition(children):
if len(children) == 0:
return True
tags = [child.tag for child in children]
if "skipped" in tags:
return False
if "failed" in tags:
return False
return True
return find(testcase, condition)
def key(testcase):
file = testcase.attrib.get("file", "UNKNOWN")
classname = testcase.attrib["classname"]
name = testcase.attrib["name"]
return "::".join([file, classname, name])
def get_passed_testcases(xmls):
testcases = get_testcases(xmls)
passed_testcases = [testcase for testcase in testcases if passed_test(testcase)]
return passed_testcases
def get_excluded_testcases(xmls):
testcases = get_testcases(xmls)
excluded_testcases = [t for t in testcases if excluded_testcase(t)]
return excluded_testcases
def excluded_testcase(testcase):
def condition(children):
for child in children:
if child.tag == "skipped":
if "Policy: we don't run" in child.attrib["message"]:
return True
return False
return find(testcase, condition)
def is_unexpected_success(testcase):
def condition(children):
for child in children:
if child.tag != "failure":
continue
is_unexpected_success = (
"unexpected success" in child.attrib["message"].lower()
)
if is_unexpected_success:
return True
return False
return find(testcase, condition)
# NB: not an unexpected success
def is_failure(testcase):
def condition(children):
for child in children:
if child.tag != "failure":
continue
is_unexpected_success = (
"unexpected success" in child.attrib["message"].lower()
)
if not is_unexpected_success:
return True
return False
return find(testcase, condition)