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:
Anna Schumaker 2023-08-01 11:18:13 -04:00
parent c1b73748f1
commit 15cee521c2
2 changed files with 114 additions and 0 deletions

69
tests/gtk/test_model.py Normal file
View 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
View 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)