File: _testing.py

package info (click to toggle)
ansible-core 2.19.0~beta6-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 32,628 kB
  • sloc: python: 180,313; cs: 4,929; sh: 4,601; xml: 34; makefile: 21
file content (26 lines) | stat: -rw-r--r-- 825 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
"""
Testing utilities for use in integration tests, not unit tests or non-test code.
Provides better error behavior than Python's `assert` statement.
"""

from __future__ import annotations

import contextlib
import typing as t


class _Checker:
    @staticmethod
    def check(value: object, msg: str | None = 'Value is not truthy.') -> None:
        """Raise an `AssertionError` if the given `value` is not truthy."""
        if not value:
            raise AssertionError(msg)


@contextlib.contextmanager
def hard_fail_context(msg: str) -> t.Generator[_Checker]:
    """Enter a context which converts all exceptions to `BaseException` and provides a `Checker` instance for making assertions."""
    try:
        yield _Checker()
    except BaseException as ex:
        raise BaseException(f"Hard failure: {msg}") from ex