report-xfstests.py: Create an object that reads xfstests results
Splitting this out of the UI code should help clean things up. Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
f1b6f42009
commit
b47955fe5a
|
@ -296,6 +296,8 @@ class Window(Gtk.Window):
|
||||||
|
|
||||||
def test_changed(self, window, file):
|
def test_changed(self, window, file):
|
||||||
self.xfstests.set_tests(file.path if file else None)
|
self.xfstests.set_tests(file.path if file else None)
|
||||||
|
if file and file.get_is_test_result():
|
||||||
|
results = reporter.testresults.TestResults(file.path)
|
||||||
|
|
||||||
def show_passing(self, passing, param):
|
def show_passing(self, passing, param):
|
||||||
self.xfstests.set_show_passing(passing.get_active())
|
self.xfstests.set_show_passing(passing.get_active())
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
from . import common
|
from . import common
|
||||||
from . import testchooser
|
from . import testchooser
|
||||||
|
from . import testresults
|
||||||
from gi.repository import GObject
|
from gi.repository import GObject
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
#!/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(name.upper(), dict())[vers] = value
|
||||||
|
|
||||||
|
def add_testcase(self, name, vers, result):
|
||||||
|
self.tests.setdefault(name, TestCase(name))[vers] = result
|
Loading…
Reference in New Issue