diff --git a/tests/mock_callable_testslide.py b/tests/mock_callable_testslide.py index f286fcf..10bd3c6 100644 --- a/tests/mock_callable_testslide.py +++ b/tests/mock_callable_testslide.py @@ -7,13 +7,13 @@ import os import testslide -from testslide.dsl import context, fcontext, Skip, xcontext # noqa: F401 +from testslide.dsl import Skip, context, fcontext, xcontext # noqa: F401 from testslide.lib import CoroutineValueError, TypeCheckError from testslide.mock_callable import ( - mock_callable, UndefinedBehaviorForCall, UnexpectedCallArguments, UnexpectedCallReceived, + mock_callable, ) from testslide.strict_mock import StrictMock diff --git a/testslide/cli.py b/testslide/cli.py index 2bb7278..60e862b 100644 --- a/testslide/cli.py +++ b/testslide/cli.py @@ -356,32 +356,34 @@ def _get_config_from_parsed_args(self, parsed_args: Any) -> _Config: force_color=parsed_args.force_color, trim_path_prefix=parsed_args.trim_path_prefix[0], show_testslide_stack_trace=parsed_args.show_testslide_stack_trace, - profile_threshold_ms=parsed_args.import_profiler[0] - if parsed_args.import_profiler - else None, + profile_threshold_ms=( + parsed_args.import_profiler[0] if parsed_args.import_profiler else None + ), shuffle=parsed_args.shuffle, list=parsed_args.list, seed=parsed_args.seed[0] if parsed_args.seed else None, focus=parsed_args.focus, fail_if_focused=parsed_args.fail_if_focused, fail_fast=parsed_args.fail_fast, - names_text_filter=parsed_args.filter_text[0] - if parsed_args.filter_text - else None, - names_regex_filter=parsed_args.filter_regex[0] - if parsed_args.filter_regex - else None, - names_regex_exclude=parsed_args.exclude_regex[0] - if parsed_args.exclude_regex - else None, + names_text_filter=( + parsed_args.filter_text[0] if parsed_args.filter_text else None + ), + names_regex_filter=( + parsed_args.filter_regex[0] if parsed_args.filter_regex else None + ), + names_regex_exclude=( + parsed_args.exclude_regex[0] if parsed_args.exclude_regex else None + ), quiet=parsed_args.quiet, dsl_debug=parsed_args.dsl_debug, - import_module_names=self._modules - if self._modules - else [ - _filename_to_module_name(test_file) - for test_file in parsed_args.test_files - ], + import_module_names=( + self._modules + if self._modules + else [ + _filename_to_module_name(test_file) + for test_file in parsed_args.test_files + ] + ), slow_callback_is_not_fatal=parsed_args.slow_callback_is_not_fatal, ) return config diff --git a/testslide/mock_callable.py b/testslide/mock_callable.py index 9ea5122..e009f82 100644 --- a/testslide/mock_callable.py +++ b/testslide/mock_callable.py @@ -10,6 +10,7 @@ import re from inspect import Traceback from typing import ( + TYPE_CHECKING, Any, Callable, Dict, @@ -17,7 +18,6 @@ Optional, Tuple, Type, - TYPE_CHECKING, Union, ) from unittest.mock import Mock @@ -25,7 +25,7 @@ from testslide.lib import _validate_return_type, _wrap_signature_and_type_validation from testslide.strict_mock import StrictMock -from .lib import _bail_if_private, _is_a_builtin, CoroutineValueError +from .lib import CoroutineValueError, _bail_if_private, _is_a_builtin from .patch import _is_instance_method, _patch if TYPE_CHECKING: diff --git a/testslide/mock_constructor.py b/testslide/mock_constructor.py index 43c49db..829b460 100644 --- a/testslide/mock_constructor.py +++ b/testslide/mock_constructor.py @@ -230,16 +230,18 @@ def _get_mocked_class( _restore_dict[target_class_id][name] = value # ...and reuse them... mocked_class_dict = { - "__new__": _wrap_type_validation( - original_class, - callable_mock, - [ - original_class_new, - original_class_init, - ], + "__new__": ( + _wrap_type_validation( + original_class, + callable_mock, + [ + original_class_new, + original_class_init, + ], + ) + if type_validation + else callable_mock ) - if type_validation - else callable_mock } mocked_class_dict.update( { @@ -331,6 +333,7 @@ def mock_constructor( _bail_if_private(class_name, allow_private) if isinstance(target, str): from testslide import _importer + target = _importer(target) target_class_id = (id(target), class_name) diff --git a/testslide/patch_attribute.py b/testslide/patch_attribute.py index 7cff6ce..92c7d13 100644 --- a/testslide/patch_attribute.py +++ b/testslide/patch_attribute.py @@ -55,6 +55,7 @@ def patch_attribute( if isinstance(target, str): from testslide import _importer + target = _importer(target) key = (id(target), attribute) diff --git a/testslide/runner.py b/testslide/runner.py index 1dff12b..22b5c5f 100644 --- a/testslide/runner.py +++ b/testslide/runner.py @@ -282,6 +282,7 @@ class FailurePrinterMixin(ColorFormatterMixin): @property def TESTSLIDE_PATH(self) -> str: from testslide import __file__ + return os.path.abspath(os.path.dirname(__file__)) def _get_test_module_index(self, tb: traceback.StackSummary) -> Optional[int]: diff --git a/testslide/strict_mock.py b/testslide/strict_mock.py index 49def41..b3ca34d 100644 --- a/testslide/strict_mock.py +++ b/testslide/strict_mock.py @@ -602,9 +602,9 @@ def __init__( self.__dict__["_name"] = name self.__dict__["_type_validation"] = type_validation self.__dict__["__caller"] = self.__get_caller(1) - self.__dict__[ - "_attributes_to_skip_type_validation" - ] = attributes_to_skip_type_validation + self.__dict__["_attributes_to_skip_type_validation"] = ( + attributes_to_skip_type_validation + ) caller_frame = inspect.currentframe().f_back # type: ignore # loading the context ends up reading files from disk and that might block