new-sonar/gateware/test.py

52 lines
1.1 KiB
Python

"""
Helper functions for a basic test suite
"""
from typing import Callable, List
from enum import Enum
from dataclasses import dataclass
from traceback import print_exc
class TestResult(str, Enum):
PASS = "PASS"
FAIL = "FAIL"
SKIP = "SKIP"
@dataclass
class TestInfo:
suite_name: str
test_name: str
result: TestResult
def __str__(self):
# TODO colour?
return f"[{self.suite_name}.{self.test_name}] {self.result}"
skipped_suites: List[str] = []
def skip_suite(suite_name: str):
"""Skips running tests from a specific suite"""
skipped_suites.append(suite_name)
def run_test(suite_name: str, test_fn: Callable, do_skip = False) -> TestResult:
test_name = test_fn.__name__
if do_skip or suite_name in skipped_suites:
res = TestInfo(suite_name, test_name, TestResult.SKIP)
else:
print(f"[{suite_name}.{test_name}] Running...")
try:
test_fn()
res = TestInfo(suite_name, test_name, TestResult.PASS)
except AssertionError:
res = TestInfo(suite_name, test_name, TestResult.FAIL)
print_exc()
print(res)
return res