#!/usr/bin/python from gi.repository import GObject import xml.etree.ElementTree class PassingTest: def __init__(self, elm): self.time = elm.attrib["time"] class SkippedTest: def __init__(self, elm): self.time = elm.attrib["time"] self.message = elm[0].attrib["message"] class FailedTest: def __init__(self, elm): self.time = elm.attrib["time"] for e in elm: match e.tag: case "failure": self.message = e.attrib["message"] case "system-out": self.system_out = e.text case "system-err": self.system_err = e.text class TestCase(GObject.GObject): def __init__(self, name): GObject.GObject.__init__(self) self.name = name self.versions = dict() def __getitem__(self, key): return self.versions.get(key, None) def __setitem__(self, key, value): self.versions[key] = None class TestResults: def __init__(self, testdir): self.versions = [ ] self.tests = dict() self.properties = dict() for file in sorted(testdir.iterdir()): self.versions.append(file.stem) root = xml.etree.ElementTree.parse(file).getroot() for prop in root.attrib.keys(): self.set_property(prop, file.stem, root.attrib[prop]) for elm in root: if elm.tag == "properties": for prop in elm: self.set_property(prop.attrib["name"], file.stem, prop.attrib["value"]) elif elm.tag == "testcase": if len(elm) == 0: result = PassingTest(elm) elif elm[0].tag == "skipped": result = SkippedTest(elm) elif elm[0].tag == "failure": result = FailedTest(elm) self.add_testcase(elm.attrib["name"], file.stem, result) def set_property(self, name, vers, value): self.properties.setdefault(vers, dict())[name.upper()] = value def add_testcase(self, name, vers, result): self.tests.setdefault(name, TestCase(name))[vers] = result