pytest-testslide/pytest_testslide.py (52 lines of code) (raw):

# Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. from types import TracebackType from typing import Any, Callable, Iterator, List, Optional import pytest import testslide as testslide_module class _TestSlideFixture: def _register_assertion(self, assertion: Callable) -> None: self._assertions.append(assertion) def __enter__(self) -> "_TestSlideFixture": self._assertions: List[Callable] = [] testslide_module.mock_callable.register_assertion = self._register_assertion return self def __exit__( self, exc_type: Optional[type], exc_val: Optional[Exception], exc_tb: TracebackType, ): aggregated_exceptions = testslide_module.AggregatedExceptions() try: for assertion in self._assertions: try: assertion() except BaseException as be: aggregated_exceptions.append_exception(be) finally: testslide_module.mock_callable.unpatch_all_callable_mocks() testslide_module.mock_constructor.unpatch_all_constructor_mocks() testslide_module.patch_attribute.unpatch_all_mocked_attributes() if aggregated_exceptions.exceptions: pytest.fail(str(aggregated_exceptions), False) @staticmethod def mock_callable( *args: Any, **kwargs: Any ) -> testslide_module.mock_callable._MockCallableDSL: return testslide_module.mock_callable.mock_callable(*args, **kwargs) @staticmethod def mock_async_callable( *args: Any, **kwargs: Any ) -> testslide_module.mock_callable._MockAsyncCallableDSL: return testslide_module.mock_callable.mock_async_callable(*args, **kwargs) @staticmethod def mock_constructor( *args: Any, **kwargs: Any ) -> testslide_module.mock_constructor._MockConstructorDSL: return testslide_module.mock_constructor.mock_constructor(*args, **kwargs) @staticmethod def patch_attribute(*args: Any, **kwargs: Any) -> None: return testslide_module.patch_attribute.patch_attribute(*args, **kwargs) @pytest.fixture def testslide() -> Iterator[_TestSlideFixture]: with _TestSlideFixture() as testslide_fixture: yield testslide_fixture