Source code for tbot.tc

import typing
import tbot
import traceback


[docs]@tbot.testcase def testsuite(*args: typing.Callable, **kwargs: typing.Any) -> None: """ Run a number of tests and report how many of them succeeded. .. note:: If your goal is implementing a large testsuite using tbot, you may want to look at integrating tbot with `pytest <https://pytest.org/>`_ instead of using this function. Check the :ref:`pytest-integration` guide for more info. :param args: Testcases :param kwargs: Named-Arguments that should be given to each testcase. Be aware that this requires all testcases to have compatible signatures. **Example**:: import tbot from tbot import tc, machine @tbot.testcase def test_a(lab: machine.linux.LinuxShell) -> None: lab.exec0("echo", "Test", "A") @tbot.testcase def test_b(lab: machine.linux.LinuxShell) -> None: lab.exec0("uname", "-a") @tbot.testcase def all_tests() -> None: with tbot.acquire_lab() as lh: tc.testsuite( test_a, test_b, lab=lh, ) """ errors: typing.List[typing.Tuple[str, str]] = [] for test in args: try: test(**kwargs) except Exception: errors.append((test.__name__, traceback.format_exc())) with tbot.log.message( tbot.log.c( tbot.log.u( "────────────────────────────────────────", "----------------------------------------", ) ).dark ) as ev: if errors != []: ev.writeln( tbot.log.c("Failure").red.bold + f": {len(errors)}/{len(args)} tests failed\n" ) for tc, err in errors: tbot.log.message(tbot.log.c(tc).blue + ":\n" + err) raise Exception(f"{len(errors)}/{len(args)} tests failed") else: ev.writeln( tbot.log.c("Success").green.bold + f": {len(args)}/{len(args)} tests passed" )