Source code for grass.gunittest.result
"""Test result object"""
from __future__ import annotations
import unittest
from typing import TYPE_CHECKING, TextIO
if TYPE_CHECKING:
import grass.gunittest.case
[docs]
class TestResult(unittest.TestResult):
"""Holder for test result information.
Test results are automatically managed by the TestCase and TestSuite
classes, and do not need to be explicitly manipulated by writers of tests.
Each instance holds the total number of tests run, and collections of
failures and errors that occurred among those test runs. The collections
contain tuples of (testcase, exceptioninfo), where exceptioninfo is the
formatted traceback of the error that occurred.
"""
start_time: float | None = None
end_time: float | None = None
time_taken: float | None = None
# descriptions and verbosity unused
# included for compatibility with unittest's TestResult
# where are also unused, so perhaps we can remove them
# stream set to None and not included in interface, it would not make sense
def __init__(
self,
stream: TextIO | None = None,
descriptions: bool | None = None,
verbosity: int | None = None,
) -> None:
super().__init__(stream=stream, descriptions=descriptions, verbosity=verbosity)
self.successes: list[
grass.gunittest.case.TestCase | unittest.case.TestCase
] = []
self.start_time = None
self.end_time = None
self.time_taken = None
[docs]
def addSuccess(
self, test: grass.gunittest.case.TestCase | unittest.case.TestCase
) -> None:
super().addSuccess(test)
self.successes.append(test)
# TODO: better would be to pass start at the beginning
# alternative is to leave counting time on class
# TODO: alternatively, be more forgiving for non-unittest methods
[docs]
def setTimes(self, start_time: float, end_time: float, time_taken: float) -> None:
"""
Store the start time, end time and time taken for a test.
We expect all grass classes to have setTimes.
:param start_time: The start time of the test, as returned by time.time()
:param end_time: The end time of the test, as returned by time.time()
:param time_taken: The time taken for the test, usually end_time-start_time
"""
self.start_time = start_time
self.end_time = end_time
self.time_taken = time_taken