Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pytest-rerunfailures for 
openSUSE:Factory checked in at 2023-07-26 13:21:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-rerunfailures (Old)
 and      /work/SRC/openSUSE:Factory/.python-pytest-rerunfailures.new.15225 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pytest-rerunfailures"

Wed Jul 26 13:21:43 2023 rev:10 rq:1100456 version:12.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-pytest-rerunfailures/python-pytest-rerunfailures.changes
  2023-05-10 16:17:28.662603178 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pytest-rerunfailures.new.15225/python-pytest-rerunfailures.changes
       2023-07-26 13:21:51.607284824 +0200
@@ -1,0 +2,17 @@
+Mon Jul 24 19:55:40 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 12.0:
+  * Drop support for pytest < 6.2.
+  * Add ``only_rerun`` and ``rerun_except`` arguments to
+    ``@pytest.mark.flaky`` marker.
+  * Add support for pytest 7.3, 7.4.
+  * Failures are now rerun only if they match at least one
+    ``--only-rerun`` pattern (if given) and none of the 
+    ``--rerun-except`` patterns. Previously, using both 
+    ``--only-rerun`` and ``--rerun-except`` together
+    could cause failures to be rerun even if they did not
+    match any ``--only-rerun`` pattern, and when using
+    multiple ``--rerun-except`` patterns, all failures
+    would be rerun unless they matched every pattern.
+
+-------------------------------------------------------------------

Old:
----
  pytest-rerunfailures-11.1.2.tar.gz

New:
----
  pytest-rerunfailures-12.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pytest-rerunfailures.spec ++++++
--- /var/tmp/diff_new_pack.Up8DI5/_old  2023-07-26 13:21:52.247288446 +0200
+++ /var/tmp/diff_new_pack.Up8DI5/_new  2023-07-26 13:21:52.251288469 +0200
@@ -16,11 +16,9 @@
 #
 
 
-%{?!python_module:%define python_module() python3-%{**}}
-%define skip_python2 1
 %{?sle15_python_module_pythons}
 Name:           python-pytest-rerunfailures
-Version:        11.1.2
+Version:        12.0
 Release:        0
 Summary:        A pytest plugin to re-run tests
 License:        MPL-2.0
@@ -30,7 +28,7 @@
 BuildRequires:  %{python_module setuptools >= 40.0}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-pytest >= 6.0
+Requires:       python-pytest >= 6.2
 Requires:       python-setuptools >= 40.0
 BuildArch:      noarch
 # SECTION test requirements

++++++ pytest-rerunfailures-11.1.2.tar.gz -> pytest-rerunfailures-12.0.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-rerunfailures-11.1.2/CHANGES.rst 
new/pytest-rerunfailures-12.0/CHANGES.rst
--- old/pytest-rerunfailures-11.1.2/CHANGES.rst 2023-03-09 08:17:56.000000000 
+0100
+++ new/pytest-rerunfailures-12.0/CHANGES.rst   2023-07-05 07:53:41.000000000 
+0200
@@ -1,20 +1,54 @@
 Changelog
 =========
 
+12.0 (2023-07-05)
+-----------------
+
+Breaking changes
+++++++++++++++++
+
+- Drop support for pytest < 6.2.
+
+Features
+++++++++
+
+- Add ``only_rerun`` and ``rerun_except`` arguments to ``@pytest.mark.flaky`` 
marker.
+
+- Add support for pytest 7.3, 7.4.
+
+Bug fixes
++++++++++
+
+- Failures are now rerun only if they match at least one ``--only-rerun``
+  pattern (if given) and none of the ``--rerun-except`` patterns. Previously,
+  using both ``--only-rerun`` and ``--rerun-except`` together could cause
+  failures to be rerun even if they did not match any ``--only-rerun``
+  pattern, and when using multiple ``--rerun-except`` patterns, all failures
+  would be rerun unless they matched every pattern.
+  (`#225 <https://github.com/pytest-dev/pytest-rerunfailures/issues/225>`_)
+
+
 11.1.2 (2023-03-09)
 -------------------
 
+Bug fixes
++++++++++
+
 - Execute teardown when test was skipped in setup phase of a fixture.
 
 
 11.1.1 (2023-02-17)
 -------------------
 
+Bug fixes
++++++++++
+
 - Fix crash during teardown when runtest protocol hook is overwritten by
   another plugin.
 
 - Fix crash during teardown when TestCase class is used as base class.
 
+
 11.1 (2023-02-09)
 -----------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-rerunfailures-11.1.2/PKG-INFO 
new/pytest-rerunfailures-12.0/PKG-INFO
--- old/pytest-rerunfailures-11.1.2/PKG-INFO    2023-03-09 08:17:57.545184100 
+0100
+++ new/pytest-rerunfailures-12.0/PKG-INFO      2023-07-05 07:53:42.352835200 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pytest-rerunfailures
-Version: 11.1.2
+Version: 12.0
 Summary: pytest plugin to re-run tests to eliminate flaky failures
 Home-page: https://github.com/pytest-dev/pytest-rerunfailures
 Author: Leah Klearman
@@ -140,6 +140,13 @@
 
    $ pytest --reruns 5 --rerun-except AssertionError --rerun-except OSError
 
+.. note::
+
+   When the ```AssertionError``` comes from the use of the ``assert`` keyword,
+   use ``--rerun-except assert`` instead::
+
+   $ pytest --reruns 5 --rerun-except assert
+
 Re-run individual failures
 --------------------------
 
@@ -175,6 +182,27 @@
       import random
       assert random.choice([True, False])
 
+Exception filtering can be accomplished by specifying regular expressions for
+``only_rerun`` and ``rerun_except``. They override the ``--only-rerun`` and
+``--rerun-except`` command line arguments, respectively.
+
+Arguments can be a single string:
+
+.. code-block:: python
+
+   @pytest.mark.flaky(rerun_except="AssertionError")
+   def test_example():
+       raise AssertionError()
+
+Or a list of strings:
+
+.. code-block:: python
+
+   @pytest.mark.flaky(only_rerun=["AssertionError", "ValueError"])
+   def test_example():
+       raise AssertionError()
+
+
 You can use ``@pytest.mark.flaky(condition)`` similarly as 
``@pytest.mark.skipif(condition)``, see `pytest-mark-skipif 
<https://docs.pytest.org/en/6.2.x/reference.html#pytest-mark-skipif>`_
 
 .. code-block:: python
@@ -223,6 +251,9 @@
 * This plugin may *not* be used with class, module, and package level fixtures.
 * This plugin is *not* compatible with pytest-xdist's --looponfail flag.
 * This plugin is *not* compatible with the core --pdb flag.
+* This plugin is *not* compatible with the plugin
+  `flaky <https://pypi.org/project/flaky/>`_, you can only have
+  ``pytest-rerunfailures`` or ``flaky`` but not both.
 
 Resources
 ---------
@@ -245,20 +276,54 @@
 Changelog
 =========
 
+12.0 (2023-07-05)
+-----------------
+
+Breaking changes
+++++++++++++++++
+
+- Drop support for pytest < 6.2.
+
+Features
+++++++++
+
+- Add ``only_rerun`` and ``rerun_except`` arguments to ``@pytest.mark.flaky`` 
marker.
+
+- Add support for pytest 7.3, 7.4.
+
+Bug fixes
++++++++++
+
+- Failures are now rerun only if they match at least one ``--only-rerun``
+  pattern (if given) and none of the ``--rerun-except`` patterns. Previously,
+  using both ``--only-rerun`` and ``--rerun-except`` together could cause
+  failures to be rerun even if they did not match any ``--only-rerun``
+  pattern, and when using multiple ``--rerun-except`` patterns, all failures
+  would be rerun unless they matched every pattern.
+  (`#225 <https://github.com/pytest-dev/pytest-rerunfailures/issues/225>`_)
+
+
 11.1.2 (2023-03-09)
 -------------------
 
+Bug fixes
++++++++++
+
 - Execute teardown when test was skipped in setup phase of a fixture.
 
 
 11.1.1 (2023-02-17)
 -------------------
 
+Bug fixes
++++++++++
+
 - Fix crash during teardown when runtest protocol hook is overwritten by
   another plugin.
 
 - Fix crash during teardown when TestCase class is used as base class.
 
+
 11.1 (2023-02-09)
 -----------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-rerunfailures-11.1.2/README.rst 
new/pytest-rerunfailures-12.0/README.rst
--- old/pytest-rerunfailures-11.1.2/README.rst  2023-03-09 08:17:56.000000000 
+0100
+++ new/pytest-rerunfailures-12.0/README.rst    2023-07-05 07:53:41.000000000 
+0200
@@ -107,6 +107,13 @@
 
    $ pytest --reruns 5 --rerun-except AssertionError --rerun-except OSError
 
+.. note::
+
+   When the ```AssertionError``` comes from the use of the ``assert`` keyword,
+   use ``--rerun-except assert`` instead::
+
+   $ pytest --reruns 5 --rerun-except assert
+
 Re-run individual failures
 --------------------------
 
@@ -142,6 +149,27 @@
       import random
       assert random.choice([True, False])
 
+Exception filtering can be accomplished by specifying regular expressions for
+``only_rerun`` and ``rerun_except``. They override the ``--only-rerun`` and
+``--rerun-except`` command line arguments, respectively.
+
+Arguments can be a single string:
+
+.. code-block:: python
+
+   @pytest.mark.flaky(rerun_except="AssertionError")
+   def test_example():
+       raise AssertionError()
+
+Or a list of strings:
+
+.. code-block:: python
+
+   @pytest.mark.flaky(only_rerun=["AssertionError", "ValueError"])
+   def test_example():
+       raise AssertionError()
+
+
 You can use ``@pytest.mark.flaky(condition)`` similarly as 
``@pytest.mark.skipif(condition)``, see `pytest-mark-skipif 
<https://docs.pytest.org/en/6.2.x/reference.html#pytest-mark-skipif>`_
 
 .. code-block:: python
@@ -190,6 +218,9 @@
 * This plugin may *not* be used with class, module, and package level fixtures.
 * This plugin is *not* compatible with pytest-xdist's --looponfail flag.
 * This plugin is *not* compatible with the core --pdb flag.
+* This plugin is *not* compatible with the plugin
+  `flaky <https://pypi.org/project/flaky/>`_, you can only have
+  ``pytest-rerunfailures`` or ``flaky`` but not both.
 
 Resources
 ---------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-rerunfailures-11.1.2/pytest_rerunfailures.egg-info/PKG-INFO 
new/pytest-rerunfailures-12.0/pytest_rerunfailures.egg-info/PKG-INFO
--- old/pytest-rerunfailures-11.1.2/pytest_rerunfailures.egg-info/PKG-INFO      
2023-03-09 08:17:57.000000000 +0100
+++ new/pytest-rerunfailures-12.0/pytest_rerunfailures.egg-info/PKG-INFO        
2023-07-05 07:53:42.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pytest-rerunfailures
-Version: 11.1.2
+Version: 12.0
 Summary: pytest plugin to re-run tests to eliminate flaky failures
 Home-page: https://github.com/pytest-dev/pytest-rerunfailures
 Author: Leah Klearman
@@ -140,6 +140,13 @@
 
    $ pytest --reruns 5 --rerun-except AssertionError --rerun-except OSError
 
+.. note::
+
+   When the ```AssertionError``` comes from the use of the ``assert`` keyword,
+   use ``--rerun-except assert`` instead::
+
+   $ pytest --reruns 5 --rerun-except assert
+
 Re-run individual failures
 --------------------------
 
@@ -175,6 +182,27 @@
       import random
       assert random.choice([True, False])
 
+Exception filtering can be accomplished by specifying regular expressions for
+``only_rerun`` and ``rerun_except``. They override the ``--only-rerun`` and
+``--rerun-except`` command line arguments, respectively.
+
+Arguments can be a single string:
+
+.. code-block:: python
+
+   @pytest.mark.flaky(rerun_except="AssertionError")
+   def test_example():
+       raise AssertionError()
+
+Or a list of strings:
+
+.. code-block:: python
+
+   @pytest.mark.flaky(only_rerun=["AssertionError", "ValueError"])
+   def test_example():
+       raise AssertionError()
+
+
 You can use ``@pytest.mark.flaky(condition)`` similarly as 
``@pytest.mark.skipif(condition)``, see `pytest-mark-skipif 
<https://docs.pytest.org/en/6.2.x/reference.html#pytest-mark-skipif>`_
 
 .. code-block:: python
@@ -223,6 +251,9 @@
 * This plugin may *not* be used with class, module, and package level fixtures.
 * This plugin is *not* compatible with pytest-xdist's --looponfail flag.
 * This plugin is *not* compatible with the core --pdb flag.
+* This plugin is *not* compatible with the plugin
+  `flaky <https://pypi.org/project/flaky/>`_, you can only have
+  ``pytest-rerunfailures`` or ``flaky`` but not both.
 
 Resources
 ---------
@@ -245,20 +276,54 @@
 Changelog
 =========
 
+12.0 (2023-07-05)
+-----------------
+
+Breaking changes
+++++++++++++++++
+
+- Drop support for pytest < 6.2.
+
+Features
+++++++++
+
+- Add ``only_rerun`` and ``rerun_except`` arguments to ``@pytest.mark.flaky`` 
marker.
+
+- Add support for pytest 7.3, 7.4.
+
+Bug fixes
++++++++++
+
+- Failures are now rerun only if they match at least one ``--only-rerun``
+  pattern (if given) and none of the ``--rerun-except`` patterns. Previously,
+  using both ``--only-rerun`` and ``--rerun-except`` together could cause
+  failures to be rerun even if they did not match any ``--only-rerun``
+  pattern, and when using multiple ``--rerun-except`` patterns, all failures
+  would be rerun unless they matched every pattern.
+  (`#225 <https://github.com/pytest-dev/pytest-rerunfailures/issues/225>`_)
+
+
 11.1.2 (2023-03-09)
 -------------------
 
+Bug fixes
++++++++++
+
 - Execute teardown when test was skipped in setup phase of a fixture.
 
 
 11.1.1 (2023-02-17)
 -------------------
 
+Bug fixes
++++++++++
+
 - Fix crash during teardown when runtest protocol hook is overwritten by
   another plugin.
 
 - Fix crash during teardown when TestCase class is used as base class.
 
+
 11.1 (2023-02-09)
 -----------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-rerunfailures-11.1.2/pytest_rerunfailures.egg-info/requires.txt 
new/pytest-rerunfailures-12.0/pytest_rerunfailures.egg-info/requires.txt
--- old/pytest-rerunfailures-11.1.2/pytest_rerunfailures.egg-info/requires.txt  
2023-03-09 08:17:57.000000000 +0100
+++ new/pytest-rerunfailures-12.0/pytest_rerunfailures.egg-info/requires.txt    
2023-07-05 07:53:42.000000000 +0200
@@ -1,5 +1,5 @@
 packaging>=17.1
-pytest>=5.3
+pytest>=6.2
 
 [:python_version < "3.8"]
 importlib-metadata>=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-rerunfailures-11.1.2/pytest_rerunfailures.py 
new/pytest-rerunfailures-12.0/pytest_rerunfailures.py
--- old/pytest-rerunfailures-11.1.2/pytest_rerunfailures.py     2023-03-09 
08:17:56.000000000 +0100
+++ new/pytest-rerunfailures-12.0/pytest_rerunfailures.py       2023-07-05 
07:53:41.000000000 +0200
@@ -302,38 +302,68 @@
         setup_state.stack = []
 
 
-def _should_hard_fail_on_error(session_config, report):
-    if report.outcome != "failed":
-        return False
+def _get_rerun_filter_regex(item, regex_name):
+    rerun_marker = _get_marker(item)
 
-    rerun_errors = session_config.option.only_rerun
-    rerun_except_errors = session_config.option.rerun_except
+    if rerun_marker is not None and regex_name in rerun_marker.kwargs:
+        regex = rerun_marker.kwargs[regex_name]
+        if isinstance(regex, str):
+            regex = [regex]
+    else:
+        regex = getattr(item.session.config.option, regex_name)
+
+    return regex
+
+
+def _matches_any_rerun_error(rerun_errors, report):
+    for rerun_regex in rerun_errors:
+        try:
+            if re.search(rerun_regex, report.longrepr.reprcrash.message):
+                return True
+        except AttributeError:
+            if re.search(rerun_regex, report.longreprtext):
+                return True
+    return False
+
+
+def _matches_any_rerun_except_error(rerun_except_errors, report):
+    for rerun_regex in rerun_except_errors:
+        if re.search(rerun_regex, report.longrepr.reprcrash.message):
+            return True
+    return False
 
-    if not rerun_errors and not rerun_except_errors:
 
+def _should_hard_fail_on_error(item, report):
+    if report.outcome != "failed":
         return False
 
-    if rerun_errors:
-        for rerun_regex in rerun_errors:
-            try:
-                if re.search(rerun_regex, report.longrepr.reprcrash.message):
-                    return False
-            except AttributeError:
-                if re.search(rerun_regex, report.longreprtext):
-                    return False
-
-    if rerun_except_errors:
-        for rerun_regex in rerun_except_errors:
-            if not re.search(rerun_regex, report.longrepr.reprcrash.message):
+    rerun_errors = _get_rerun_filter_regex(item, "only_rerun")
+    rerun_except_errors = _get_rerun_filter_regex(item, "rerun_except")
 
-                return False
+    if (not rerun_errors) and (not rerun_except_errors):
+        # Using neither --only-rerun nor --rerun-except
+        return False
 
-    return True
+    elif rerun_errors and (not rerun_except_errors):
+        # Using --only-rerun but not --rerun-except
+        return not _matches_any_rerun_error(rerun_errors, report)
+
+    elif (not rerun_errors) and rerun_except_errors:
+        # Using --rerun-except but not --only-rerun
+        return _matches_any_rerun_except_error(rerun_except_errors, report)
+
+    else:
+        # Using both --only-rerun and --rerun-except
+        matches_rerun_only = _matches_any_rerun_error(rerun_errors, report)
+        matches_rerun_except = _matches_any_rerun_except_error(
+            rerun_except_errors, report
+        )
+        return (not matches_rerun_only) or matches_rerun_except
 
 
 def _should_not_rerun(item, report, reruns):
     xfail = hasattr(report, "wasxfail")
-    is_terminal_error = _should_hard_fail_on_error(item.session.config, report)
+    is_terminal_error = _should_hard_fail_on_error(item, report)
     condition = get_reruns_condition(item)
     return (
         item.execution_count > reruns
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-rerunfailures-11.1.2/setup.cfg 
new/pytest-rerunfailures-12.0/setup.cfg
--- old/pytest-rerunfailures-11.1.2/setup.cfg   2023-03-09 08:17:57.546177400 
+0100
+++ new/pytest-rerunfailures-12.0/setup.cfg     2023-07-05 07:53:42.353158000 
+0200
@@ -7,7 +7,7 @@
 
 [metadata]
 name = pytest-rerunfailures
-version = 11.1.2
+version = 12.0
 url = https://github.com/pytest-dev/pytest-rerunfailures
 description = pytest plugin to re-run tests to eliminate flaky failures
 long_description = file: HEADER.rst, README.rst, CHANGES.rst
@@ -42,7 +42,7 @@
 python_requires = >= 3.7
 install_requires = 
        packaging >= 17.1
-       pytest >= 5.3
+       pytest >= 6.2
        importlib-metadata>=1;python_version<"3.8"
 
 [options.entry_points]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-rerunfailures-11.1.2/test_pytest_rerunfailures.py 
new/pytest-rerunfailures-12.0/test_pytest_rerunfailures.py
--- old/pytest-rerunfailures-11.1.2/test_pytest_rerunfailures.py        
2023-03-09 08:17:56.000000000 +0100
+++ new/pytest-rerunfailures-12.0/test_pytest_rerunfailures.py  2023-07-05 
07:53:41.000000000 +0200
@@ -575,6 +575,7 @@
         (["AssertionError: "], True),
         (["ERR"], False),
         (["AssertionError", "OSError"], True),
+        (["ValueError", "OSError"], False),
     ],
 )
 def test_rerun_except_flag(testdir, rerun_except_texts, should_rerun):
@@ -587,7 +588,44 @@
 
     pytest_args = ["--reruns", str(num_reruns)]
     for rerun_except_text in rerun_except_texts:
-        print(rerun_except_text)
+        pytest_args.extend(["--rerun-except", rerun_except_text])
+    result = testdir.runpytest(*pytest_args)
+    assert_outcomes(
+        result, passed=num_passed, failed=num_failed, rerun=num_reruns_actual
+    )
+
+
+@pytest.mark.parametrize(
+    "only_rerun_texts, rerun_except_texts, should_rerun",
+    [
+        # Matches --only-rerun, but not --rerun-except (rerun)
+        (["ValueError"], ["Not a Match"], True),
+        (["ValueError", "AssertionError"], ["Not a match", "OSError"], True),
+        # Matches --only-rerun AND --rerun-except (no rerun)
+        (["ValueError"], ["ERR"], False),
+        (["OSError", "ValueError"], ["Not a match", "ERR"], False),
+        # Matches --rerun-except, but not --only-rerun (no rerun)
+        (["OSError", "AssertionError"], ["TypeError", "ValueError"], False),
+        # Matches neither --only-rerun nor --rerun-except (no rerun)
+        (["AssertionError"], ["OSError"], False),
+        # --rerun-except overrides --only-rerun for same arg (no rerun)
+        (["ValueError"], ["ValueError"], False),
+    ],
+)
+def test_rerun_except_and_only_rerun(
+    testdir, rerun_except_texts, only_rerun_texts, should_rerun
+):
+    testdir.makepyfile('def test_only_rerun_except(): raise ValueError("ERR")')
+
+    num_failed = 1
+    num_passed = 0
+    num_reruns = 1
+    num_reruns_actual = num_reruns if should_rerun else 0
+
+    pytest_args = ["--reruns", str(num_reruns)]
+    for only_rerun_text in only_rerun_texts:
+        pytest_args.extend(["--only-rerun", only_rerun_text])
+    for rerun_except_text in rerun_except_texts:
         pytest_args.extend(["--rerun-except", rerun_except_text])
     result = testdir.runpytest(*pytest_args)
     assert_outcomes(
@@ -659,6 +697,77 @@
     assert_outcomes(result, passed=0, failed=1, rerun=2)
 
 
+@pytest.mark.parametrize(
+    "marker_only_rerun,cli_only_rerun,should_rerun",
+    [
+        ("AssertionError", None, True),
+        ("AssertionError: ERR", None, True),
+        (["AssertionError"], None, True),
+        (["AssertionError: ABC"], None, False),
+        ("ValueError", None, False),
+        (["ValueError"], None, False),
+        (["AssertionError", "ValueError"], None, True),
+        # CLI override behavior
+        ("AssertionError", "ValueError", True),
+        ("ValueError", "AssertionError", False),
+    ],
+)
+def test_only_rerun_flag_in_flaky_marker(
+    testdir, marker_only_rerun, cli_only_rerun, should_rerun
+):
+    testdir.makepyfile(
+        f"""
+        import pytest
+
+        @pytest.mark.flaky(reruns=1, only_rerun={marker_only_rerun!r})
+        def test_fail():
+            raise AssertionError("ERR")
+        """
+    )
+    args = []
+    if cli_only_rerun:
+        args.extend(["--only-rerun", cli_only_rerun])
+    result = testdir.runpytest()
+    num_reruns = 1 if should_rerun else 0
+    assert_outcomes(result, passed=0, failed=1, rerun=num_reruns)
+
+
+@pytest.mark.parametrize(
+    "marker_rerun_except,cli_rerun_except,should_rerun",
+    [
+        ("AssertionError", None, False),
+        ("AssertionError: ERR", None, False),
+        (["AssertionError"], None, False),
+        (["AssertionError: ABC"], None, True),
+        ("ValueError", None, True),
+        (["ValueError"], None, True),
+        (["OSError", "ValueError"], None, True),
+        (["OSError", "AssertionError"], None, False),
+        # CLI override behavior
+        ("AssertionError", "ValueError", False),
+        ("ValueError", "AssertionError", True),
+    ],
+)
+def test_rerun_except_flag_in_flaky_marker(
+    testdir, marker_rerun_except, cli_rerun_except, should_rerun
+):
+    testdir.makepyfile(
+        f"""
+        import pytest
+
+        @pytest.mark.flaky(reruns=1, rerun_except={marker_rerun_except!r})
+        def test_fail():
+            raise AssertionError("ERR")
+        """
+    )
+    args = []
+    if cli_rerun_except:
+        args.extend(["--rerun-except", cli_rerun_except])
+    result = testdir.runpytest(*args)
+    num_reruns = 1 if should_rerun else 0
+    assert_outcomes(result, passed=0, failed=1, rerun=num_reruns)
+
+
 def test_ini_file_parameters(testdir):
     testdir.makepyfile(
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-rerunfailures-11.1.2/tox.ini 
new/pytest-rerunfailures-12.0/tox.ini
--- old/pytest-rerunfailures-11.1.2/tox.ini     2023-03-09 08:17:56.000000000 
+0100
+++ new/pytest-rerunfailures-12.0/tox.ini       2023-07-05 07:53:41.000000000 
+0200
@@ -11,21 +11,20 @@
 [tox]
 envlist =
     linting
-    py{37,38,39,py3}-pytest{60,61}
-    py{37,38,39,310,311,py3}-pytest{62,70,71,72}
-    py{37,38,39,310,311,py3}-pytest{main}
+    py{37,38,39,310,311,py3}-pytest{62,70,71,72,73,74}
+    py{38,39,310,311,py3}-pytest{main}
 minversion = 4.0
 
 [testenv]
 commands = pytest test_pytest_rerunfailures.py {posargs}
 deps =
     pytest-xdist
-    pytest60: pytest==6.0.*
-    pytest61: pytest==6.1.*
     pytest62: pytest==6.2.*
     pytest70: pytest==7.0.*
     pytest71: pytest==7.1.*
     pytest72: pytest==7.2.*
+    pytest73: pytest==7.3.*
+    pytest74: pytest==7.4.*
     pytestmain: git+https://github.com/pytest-dev/pytest.git@main#egg=pytest
 
 [testenv:linting]

Reply via email to