diff --git a/changes/362.bugfix.rst b/changes/362.bugfix.rst new file mode 100644 index 00000000..0af2f58a --- /dev/null +++ b/changes/362.bugfix.rst @@ -0,0 +1 @@ +Fix ``INTERNALERROR`` when ``only_rerun`` or ``rerun_except`` is given a bare exception class instead of a list. diff --git a/src/pytest_rerunfailures.py b/src/pytest_rerunfailures.py index 279d8360..c50fecd7 100644 --- a/src/pytest_rerunfailures.py +++ b/src/pytest_rerunfailures.py @@ -527,7 +527,9 @@ def _get_rerun_filter_regex(item, regex_name): if rerun_marker is not None and regex_name in rerun_marker.kwargs: regex = rerun_marker.kwargs[regex_name] - if isinstance(regex, str): + if isinstance(regex, str) or ( + isinstance(regex, type) and issubclass(regex, BaseException) + ): regex = [regex] else: regex = getattr(item.session.config.option, regex_name) diff --git a/tests/test_pytest_rerunfailures.py b/tests/test_pytest_rerunfailures.py index 092556fb..f77460be 100644 --- a/tests/test_pytest_rerunfailures.py +++ b/tests/test_pytest_rerunfailures.py @@ -1765,6 +1765,10 @@ def test_fail(): ("only_rerun=[ValueError]", False), ("rerun_except=[AssertionError]", False), ("rerun_except=[ValueError]", True), + ("only_rerun=AssertionError", True), + ("only_rerun=ValueError", False), + ("rerun_except=AssertionError", False), + ("rerun_except=ValueError", True), ], ) def test_rerun_filter_accepts_exception_classes(testdir, filter_kwarg, should_rerun):