report-xfstests.py: Show why tests were skipped

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
Anna Schumaker 2022-02-08 13:33:27 -05:00
parent 4d36a33840
commit 31166081bf
3 changed files with 65 additions and 7 deletions

View File

@ -14,6 +14,15 @@ class Property(GObject.GObject):
self.value = value
class NotRun(GObject.GObject):
def __init__(self, message):
GObject.GObject.__init__(self)
self.message = message
def __lt__(self, rhs):
return self.message < rhs.message
class Results(Property):
def __init__(self, properties):
total = properties["TESTS"]
@ -37,6 +46,17 @@ class Model(GObject.GObject, Gio.ListModel):
def do_get_item(self, i): return self.properties[i]
class NotRunModel(GObject.GObject, Gio.ListModel):
def __init__(self, notrun):
GObject.GObject.__init__(self)
self.notrun = [ NotRun(m) for m in notrun ]
self.notrun.sort()
def do_get_item_type(self): return GObject.TYPE_PYOBJECT
def do_get_n_items(self): return len(self.notrun)
def do_get_item(self, i): return self.notrun[i]
class Factory(Gtk.SignalListItemFactory):
def __init__(self, column):
Gtk.SignalListItemFactory.__init__(self)
@ -63,6 +83,27 @@ class Factory(Gtk.SignalListItemFactory):
listitem.set_child(None)
class NotRunFactory(Gtk.SignalListItemFactory):
def __init__(self):
Gtk.SignalListItemFactory.__init__(self)
self.connect("setup", self.on_setup)
self.connect("bind", self.on_bind)
self.connect("unbind", self.on_unbind)
self.connect("teardown", self.on_teardown)
def on_setup(self, factory, listitem):
listitem.set_child(Gtk.Label(xalign=0))
def on_bind(self, factory, listitem):
listitem.get_child().set_text(listitem.get_item().message)
def on_unbind(self, factory, listitem):
listitem.get_child().set_text("")
def on_teardown(self, factory, listitem):
listitem.set_child(None)
class View(Gtk.ColumnView):
def __init__(self, properties):
self.selection = Gtk.NoSelection.new(Model(properties))
@ -72,6 +113,13 @@ class View(Gtk.ColumnView):
self.append_column(Gtk.ColumnViewColumn.new(title, Factory(title)))
class NotRunView(Gtk.ListView):
def __init__(self, notrun):
self.selection = Gtk.NoSelection.new(NotRunModel(notrun))
Gtk.ListView.__init__(self, model=self.selection, factory=NotRunFactory())
self.add_css_class("data-table")
class Stack(Gtk.Stack):
def __init__(self):
Gtk.Stack.__init__(self, transition_type=Gtk.StackTransitionType.OVER_LEFT_RIGHT)
@ -85,6 +133,9 @@ class Stack(Gtk.Stack):
def show_properties(self, results):
for version in results.versions:
window = Gtk.ScrolledWindow(vscrollbar_policy=Gtk.PolicyType.NEVER,
child=View(results.properties[version]))
self.add_titled(window, version, version)
self.add_page(View(results.properties[version]), version, Gtk.PolicyType.NEVER)
self.add_page(NotRunView(results.skipped), "[not run]", Gtk.PolicyType.AUTOMATIC)
def add_page(self, child, name, policy):
window = Gtk.ScrolledWindow(vscrollbar_policy=policy, child=child)
self.add_titled(window, name, name)

View File

@ -48,6 +48,7 @@ class TestResults:
self.versions = [ ]
self.tests = dict()
self.properties = dict()
self.skipped = set()
for file in sorted(testdir.iterdir()):
self.versions.append(file.stem)
@ -66,6 +67,7 @@ class TestResults:
result = PassingTest(elm)
elif elm[0].tag == "skipped":
result = SkippedTest(elm)
self.skipped.add(result.message)
elif elm[0].tag == "failure":
result = FailedTest(elm)
self.add_testcase(elm.attrib["name"], file.stem, result)

View File

@ -120,11 +120,16 @@ class Filter(Gtk.Filter):
def do_match(self, testcase):
search = [ f"name={testcase.name}" ]
for key in sorted(testcase.versions.keys()):
keys = [ key ] + key.split("-")
keys = [ "status", key ] + key.split("-")
match type(testcase[key]):
case testresults.PassingTest: res = [ "passing", "passed" ]
case testresults.SkippedTest: res = [ "skipped" ]
case testresults.FailedTest: res = [ "failed", "failing" ]
case testresults.PassingTest:
res = [ "passing", "passed" ]
case testresults.SkippedTest:
res = [ "skipped" ]
search.append(f"message={testcase[key].message}")
case testresults.FailedTest:
res = [ "failed", "failing" ]
search.append(f"message={testcase[key].message}")
case _: res = [ "missing" ]
for k in keys:
for r in res: