diff --git a/reporter/testproperties.py b/reporter/testproperties.py index e5579c3..cef66fd 100644 --- a/reporter/testproperties.py +++ b/reporter/testproperties.py @@ -38,7 +38,7 @@ class Results(Property): class Model(GObject.GObject, Gio.ListModel): def __init__(self, properties): GObject.GObject.__init__(self) - self.properties = [ Property(p, properties[p]) for p in PROPERTIES ] + self.properties = [ Property(p, properties.get(p)) for p in PROPERTIES ] self.properties.append(Results(properties)) def do_get_item_type(self): return GObject.TYPE_PYOBJECT @@ -73,7 +73,9 @@ class Factory(Gtk.SignalListItemFactory): label = listitem.get_child() match self.column: case "Property": label.set_text(listitem.get_item().key) - case "Value": label.set_text(listitem.get_item().value) + case "Value": + value = listitem.get_item().value + label.set_text(value if value else "") case _: label.set_text("=") def on_unbind(self, factory, listitem): diff --git a/reporter/testresults.py b/reporter/testresults.py index c296173..e26ad02 100644 --- a/reporter/testresults.py +++ b/reporter/testresults.py @@ -3,6 +3,7 @@ from gi.repository import GObject from gi.repository import Gtk import html import pathlib +import re import tarfile import xml.etree.ElementTree @@ -23,20 +24,24 @@ class SkippedTest: self.message = elm[0].attrib["message"] self.message = self.message.replace(test_dev, "$TEST_DEV") self.message = self.message.replace(test_dir, "$TEST_DIR") - self.message = self.message.replace(scratch_dev, "$SCRATCH_DEV") - self.message = self.message.replace(scratch_mnt, "$SCRATCH_MNT") + if scratch_dev: + self.message = self.message.replace(scratch_dev, "$SCRATCH_DEV") + if scratch_mnt: + self.message = self.message.replace(scratch_mnt, "$SCRATCH_MNT") class FailedTest: - def __init__(self, elm): + def __init__(self, ns, elm): self.time = elm.attrib["time"] self.system_out = Gtk.TextBuffer() self.system_err = Gtk.TextBuffer() for e in elm: - match e.tag: - case "failure": self.message = e.attrib["message"] - case "system-out": self.system_out.set_text(html.unescape(e.text)) - case "system-err": self.system_err.set_text(html.unescape(e.text)) + if e.tag == f"{ns}failure": + self.message = e.attrib["message"] + elif e.tag == f"{ns}system-out": + self.system_out.set_text(html.unescape(e.text)) + elif e.tag == f"{ns}system-err": + self.system_err.set_text(html.unescape(e.text)) class TestCase(GObject.GObject): @@ -66,26 +71,29 @@ class TestResults: self.versions.append(pathlib.Path(name).stem) passed = 0 + match = re.match(r"{.*?}", root.tag) + ns = match.group(0) if match else "" + for prop in root.attrib.keys(): self.set_property(prop, root.attrib[prop]) for elm in root: - if elm.tag == "properties": + if elm.tag == f"{ns}properties": for prop in elm: self.set_property(prop.attrib["name"], prop.attrib["value"]) - elif elm.tag == "testcase": + elif elm.tag == f"{ns}testcase": if len(elm) == 0: result = PassingTest(elm) passed += 1 - elif elm[0].tag == "skipped": + elif elm[0].tag == f"{ns}skipped": result = SkippedTest(elm, self.properties[self.versions[-1]]["TEST_DEV"], self.properties[self.versions[-1]]["TEST_DIR"], - self.properties[self.versions[-1]]["SCRATCH_DEV"], - self.properties[self.versions[-1]]["SCRATCH_MNT"]) + self.properties[self.versions[-1]].get("SCRATCH_DEV"), + self.properties[self.versions[-1]].get("SCRATCH_MNT")) self.skipped.add(result.message) - elif elm[0].tag == "failure": - result = FailedTest(elm) + elif elm[0].tag == f"{ns}failure": + result = FailedTest(ns, elm) self.add_testcase(elm.attrib["name"], result) self.set_property("passed", str(passed)) diff --git a/reporter/testviewer.py b/reporter/testviewer.py index 98e1ea2..83f094e 100644 --- a/reporter/testviewer.py +++ b/reporter/testviewer.py @@ -124,6 +124,7 @@ class Filter(Gtk.Filter): match type(testcase[key]): case testresults.PassingTest: res = [ "passing", "passed" ] + search.append(f"time={testcase[key].time}") case testresults.SkippedTest: res = [ "skipped" ] search.append(f"message={testcase[key].message}") @@ -171,7 +172,7 @@ class Viewer(Gtk.ScrolledWindow): self.columnview = Gtk.ColumnView.new(model=self.selection) self.columnview.add_css_class("data-table") - self.provider.load_from_data(CSS.encode()) + self.provider.load_from_data(CSS, -1) self.get_style_context().add_provider_for_display(self.get_display(), self.provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) self.set_child(self.columnview)