diff --git a/reporter/__init__.py b/reporter/__init__.py index 88faa7e..7c3da8d 100644 --- a/reporter/__init__.py +++ b/reporter/__init__.py @@ -46,7 +46,7 @@ class TestViewer(Gtk.Box): def set_test_result(self, file): current = self.stack.clear() self.viewer.clear() - if file and file.get_is_test_result(): + if file and file.is_file(): results = testresults.TestResults(file.path) self.stack.show_properties(results, current) self.viewer.show_results(results) diff --git a/reporter/testchooser.py b/reporter/testchooser.py index 678f147..e53fd9f 100644 --- a/reporter/testchooser.py +++ b/reporter/testchooser.py @@ -10,13 +10,14 @@ class Path(GObject.GObject): def __init__(self, path): GObject.GObject.__init__(self) self.path = path + self.is_file = self.path.is_file def __lt__(self, rhs): return self.path < rhs.path - def get_is_test_result(self): - return False not in [ f.is_file() for f in self.path.iterdir() ] - def get_name(self): return self.path.name + def get_name(self): + name = self.path.name + return name.split(".")[0] if self.is_file() else name def get_model(self): - if not self.get_is_test_result(): + if self.path.is_dir(): return DirectoryModel(self.path) @@ -73,7 +74,7 @@ class DirectoryWindow(Gtk.ScrolledWindow): expander = listitem.get_child() expander.set_list_row(treerow) expander.get_child().set_text(filepath.get_name()) - listitem.set_selectable(filepath.get_is_test_result()) + listitem.set_selectable(filepath.is_file()) def on_unbind(self, factory, listitem): expander = listitem.get_child() diff --git a/reporter/testresults.py b/reporter/testresults.py index 8460615..c45b6cc 100644 --- a/reporter/testresults.py +++ b/reporter/testresults.py @@ -2,6 +2,8 @@ from gi.repository import GObject from gi.repository import Gtk import html +import pathlib +import tarfile import xml.etree.ElementTree class PassingTest: @@ -44,39 +46,43 @@ class TestCase(GObject.GObject): class TestResults: - def __init__(self, testdir): + def __init__(self, testtar): self.versions = [ ] self.tests = dict() self.properties = dict() self.skipped = set() - for file in sorted(testdir.iterdir()): - self.versions.append(file.stem) - passed = 0 + with tarfile.open(testtar, "r:*") as tf: + for member in [ m for m in tf.getmembers() if m.isfile() ]: + self.read_file(member.name, tf.extractfile(member)) + self.versions.sort() - root = xml.etree.ElementTree.parse(file).getroot() - for prop in root.attrib.keys(): - self.set_property(prop, file.stem, root.attrib[prop]) + def read_file(self, name, file): + root = xml.etree.ElementTree.parse(file).getroot() + self.versions.append(pathlib.Path(name).stem) + passed = 0 - 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) - passed += 1 - 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) - self.set_property("passed", file.stem, str(passed)) + for prop in root.attrib.keys(): + self.set_property(prop, root.attrib[prop]) - def set_property(self, name, vers, value): - self.properties.setdefault(vers, dict())[name.upper()] = value + for elm in root: + if elm.tag == "properties": + for prop in elm: + self.set_property(prop.attrib["name"], prop.attrib["value"]) + elif elm.tag == "testcase": + if len(elm) == 0: + result = PassingTest(elm) + passed += 1 + 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"], result) + self.set_property("passed", str(passed)) - def add_testcase(self, name, vers, result): - self.tests.setdefault(name, TestCase(name))[vers] = result + def set_property(self, name, value): + self.properties.setdefault(self.versions[-1], dict())[name.upper()] = value + + def add_testcase(self, name, result): + self.tests.setdefault(name, TestCase(name))[self.versions[-1]] = result