gtk: Add TestCase and XunitResult objects
These are the underlying GObjects that will be returned by a TestCaseList ListModel. Signed-off-by: Anna Schumaker <anna@nowheycreamery.com>
This commit is contained in:
parent
c1b73748f1
commit
15cee521c2
69
tests/gtk/test_model.py
Normal file
69
tests/gtk/test_model.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
# Copyright 2023 (c) Anna Schumaker.
|
||||
"""Tests our Testcase Gio.ListModel."""
|
||||
import unittest
|
||||
import xfstestsdb.gtk.model
|
||||
from gi.repository import GObject
|
||||
|
||||
|
||||
class TestXunitResult(unittest.TestCase):
|
||||
"""Tests a single TestCase Xunit instance."""
|
||||
|
||||
def test_xunit_result(self):
|
||||
"""Test creating an xunit instance."""
|
||||
xunit = xfstestsdb.gtk.model.XunitResult(name="my xunit name",
|
||||
status="passed", time=123,
|
||||
message="my message",
|
||||
stdout="my stdout",
|
||||
stderr="my stderr")
|
||||
self.assertIsInstance(xunit, GObject.GObject)
|
||||
self.assertEqual(xunit.name, "my xunit name")
|
||||
self.assertEqual(xunit.status, "passed")
|
||||
self.assertEqual(xunit.time, 123)
|
||||
self.assertEqual(xunit.message, "my message")
|
||||
self.assertEqual(xunit.stdout, "my stdout")
|
||||
self.assertEqual(xunit.stderr, "my stderr")
|
||||
|
||||
|
||||
class TestTestCase(unittest.TestCase):
|
||||
"""Tests our TestCase GObject."""
|
||||
|
||||
def setUp(self):
|
||||
"""Set up common variables."""
|
||||
self.testcase = xfstestsdb.gtk.model.TestCase(name="test-case")
|
||||
|
||||
def test_init(self):
|
||||
"""Check that the TestCase is set up properly."""
|
||||
self.assertIsInstance(self.testcase, GObject.GObject)
|
||||
self.assertEqual(self.testcase.name, "test-case")
|
||||
|
||||
def test_compare(self):
|
||||
"""Test the less-than operator on TestCases."""
|
||||
testcase2 = xfstestsdb.gtk.model.TestCase(name="test-case-2")
|
||||
self.assertTrue(self.testcase < testcase2)
|
||||
self.assertFalse(testcase2 < self.testcase)
|
||||
self.assertFalse(self.testcase < self.testcase)
|
||||
|
||||
def test_xunits(self):
|
||||
"""Test adding xunits to a TestCase."""
|
||||
self.assertIsNone(self.testcase["xunit-1"])
|
||||
|
||||
self.testcase.add_xunit("xunit-1", "passed", 123, "message",
|
||||
"stdout", "stderr")
|
||||
xunit = self.testcase["xunit-1"]
|
||||
self.assertIsInstance(xunit, xfstestsdb.gtk.model.XunitResult)
|
||||
self.assertEqual(xunit.name, "xunit-1")
|
||||
self.assertEqual(xunit.status, "passed")
|
||||
self.assertEqual(xunit.time, 123)
|
||||
self.assertEqual(xunit.message, "message")
|
||||
self.assertEqual(xunit.stdout, "stdout")
|
||||
self.assertEqual(xunit.stderr, "stderr")
|
||||
|
||||
self.testcase.add_xunit("xunit-2", "failed", 456, None, None, None)
|
||||
xunit = self.testcase["xunit-2"]
|
||||
self.assertIsInstance(xunit, xfstestsdb.gtk.model.XunitResult)
|
||||
self.assertEqual(xunit.name, "xunit-2")
|
||||
self.assertEqual(xunit.status, "failed")
|
||||
self.assertEqual(xunit.time, 456)
|
||||
self.assertEqual(xunit.message, "")
|
||||
self.assertEqual(xunit.stdout, "")
|
||||
self.assertEqual(xunit.stderr, "")
|
45
xfstestsdb/gtk/model.py
Normal file
45
xfstestsdb/gtk/model.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
# Copyright 2023 (c) Anna Schumaker.
|
||||
"""Our Testcase Gio.ListModel."""
|
||||
import typing
|
||||
from gi.repository import GObject
|
||||
|
||||
|
||||
class XunitResult(GObject.GObject):
|
||||
"""The results for a single TestCase with a specific Xunit."""
|
||||
|
||||
name = GObject.Property(type=str)
|
||||
status = GObject.Property(type=str)
|
||||
time = GObject.Property(type=int)
|
||||
message = GObject.Property(type=str)
|
||||
stdout = GObject.Property(type=str)
|
||||
stderr = GObject.Property(type=str)
|
||||
|
||||
|
||||
class TestCase(GObject.GObject):
|
||||
"""Collects results for a single TestCase with multiple Xunits."""
|
||||
|
||||
name = GObject.Property(type=str)
|
||||
|
||||
def __init__(self, name: str) -> None:
|
||||
"""Initialize a TestCase object."""
|
||||
super().__init__(name=name)
|
||||
self.__xunits = {}
|
||||
|
||||
def __getitem__(self, xunit: str) -> XunitResult | None:
|
||||
"""Get the results for a specific Xunit."""
|
||||
return self.__xunits.get(xunit)
|
||||
|
||||
def __lt__(self, rhs: typing.Self) -> bool:
|
||||
"""Compare the names of two TestCases."""
|
||||
return self.name < rhs.name
|
||||
|
||||
def add_xunit(self, name: str, status: str, time: int,
|
||||
message: str | None, stdout: str | None,
|
||||
stderr: str | None) -> None:
|
||||
"""Add an xunit result to the TestCase."""
|
||||
message = "" if message is None else message
|
||||
stdout = "" if stdout is None else stdout
|
||||
stderr = "" if stderr is None else stderr
|
||||
self.__xunits[name] = XunitResult(name=name, status=status, time=time,
|
||||
message=message, stdout=stdout,
|
||||
stderr=stderr)
|
Loading…
Reference in New Issue
Block a user