"""Helper plugin for pytester; should not be loaded on its own.""" # This plugin contains assertions used by pytester. pytester cannot # contain them itself, since it is imported by the `pytest` module, # hence cannot be subject to assertion rewriting, which requires a # module to not be already imported. from __future__ import annotations from typing import Dict from typing import Optional from typing import Sequence from typing import Tuple from typing import Union from _pytest.reports import CollectReport from _pytest.reports import TestReport def assertoutcome( outcomes: tuple[ Sequence[TestReport], Sequence[CollectReport | TestReport], Sequence[CollectReport | TestReport], ], passed: int = 0, skipped: int = 0, failed: int = 0, ) -> None: __tracebackhide__ = True realpassed, realskipped, realfailed = outcomes obtained = { 'passed': len(realpassed), 'skipped': len(realskipped), 'failed': len(realfailed), } expected = {'passed': passed, 'skipped': skipped, 'failed': failed} assert obtained == expected, outcomes def assert_outcomes( outcomes: dict[str, int], passed: int = 0, skipped: int = 0, failed: int = 0, errors: int = 0, xpassed: int = 0, xfailed: int = 0, warnings: int | None = None, deselected: int | None = None, ) -> None: """Assert that the specified outcomes appear with the respective numbers (0 means it didn't occur) in the text output from a test run.""" __tracebackhide__ = True obtained = { 'passed': outcomes.get('passed', 0), 'skipped': outcomes.get('skipped', 0), 'failed': outcomes.get('failed', 0), 'errors': outcomes.get('errors', 0), 'xpassed': outcomes.get('xpassed', 0), 'xfailed': outcomes.get('xfailed', 0), } expected = { 'passed': passed, 'skipped': skipped, 'failed': failed, 'errors': errors, 'xpassed': xpassed, 'xfailed': xfailed, } if warnings is not None: obtained['warnings'] = outcomes.get('warnings', 0) expected['warnings'] = warnings if deselected is not None: obtained['deselected'] = outcomes.get('deselected', 0) expected['deselected'] = deselected assert obtained == expected