Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pytest-asyncio for 
openSUSE:Factory checked in at 2022-07-06 15:41:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-asyncio (Old)
 and      /work/SRC/openSUSE:Factory/.python-pytest-asyncio.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pytest-asyncio"

Wed Jul  6 15:41:41 2022 rev:10 rq:986981 version:0.18.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-pytest-asyncio/python-pytest-asyncio.changes  
    2022-01-23 16:25:41.388593393 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pytest-asyncio.new.1548/python-pytest-asyncio.changes
    2022-07-06 15:41:45.138495370 +0200
@@ -1,0 +2,23 @@
+Wed Jul  6 07:59:54 UTC 2022 - Steve Kowalik <steven.kowa...@suse.com>
+
+- Inject multibuild to defeat a build loop 
+
+-------------------------------------------------------------------
+Tue Jun 28 19:00:14 UTC 2022 - Ben Greiner <c...@bnavigator.de>
+
+- Update to 0.18.3
+  * Adds pytest-trio to the test dependencies
+  * Fixes a bug that caused pytest-asyncio to try to set up async
+    pytest_trio fixtures in strict mode. #298
+- Release 0.18.2
+  * Fix asyncio auto mode not marking static methods. #295
+  * Fix a compatibility issue with Hypothesis 6.39.0. #302
+- Release 0.18.1
+  * Fixes a regression that prevented async fixtures from working
+    in synchronous tests. #286
+- Release 0.18.0
+  * Raise a warning if @pytest.mark.asyncio is applied to non-async
+    function. #275
+  * Support parametrized event_loop fixture. #278
+
+-------------------------------------------------------------------

Old:
----
  pytest-asyncio-0.17.2.tar.gz

New:
----
  _multibuild
  pytest-asyncio-0.18.3.tar.gz

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

Other differences:
------------------
++++++ python-pytest-asyncio.spec ++++++
--- /var/tmp/diff_new_pack.KWJFpj/_old  2022-07-06 15:41:45.970496596 +0200
+++ /var/tmp/diff_new_pack.KWJFpj/_new  2022-07-06 15:41:45.974496602 +0200
@@ -1,5 +1,5 @@
 #
-# spec file for package python-pytest-asyncio
+# spec file
 #
 # Copyright (c) 2022 SUSE LLC
 #
@@ -16,29 +16,39 @@
 #
 
 
-%define skip_python2 1
-%{?!python_module:%define python_module() python3-%{**}}
-Name:           python-pytest-asyncio
-Version:        0.17.2
+%global flavor @BUILD_FLAVOR@%{nil}
+%if "%{flavor}" == "test"
+%define psuffix -test
+%bcond_without test
+%else
+%define psuffix %{nil}
+%bcond_with test
+%endif
+Name:           python-pytest-asyncio%{psuffix}
+Version:        0.18.3
 Release:        0
 Summary:        Pytest support for asyncio
 License:        Apache-2.0
 URL:            https://github.com/pytest-dev/pytest-asyncio
 Source:         
https://github.com/pytest-dev/pytest-asyncio/archive/v%{version}.tar.gz#/pytest-asyncio-%{version}.tar.gz
-BuildRequires:  %{python_module async_generator >= 1.3}
 BuildRequires:  %{python_module base >= 3.7}
-BuildRequires:  %{python_module flaky >= 3.5.0}
-BuildRequires:  %{python_module hypothesis >= 5.7.1}
-BuildRequires:  %{python_module pytest >= 6.1.0}
 BuildRequires:  %{python_module setuptools_scm}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-pytest >= 6.1.0
-%if 0%{python_version_nodots} < 38
-Requires:       python-typing-extensions >= 4
+%if 0%{?python_version_nodots} < 38
+Requires:       python-typing-extensions >= 3.7.2
 %endif
 BuildArch:      noarch
+%if %{with test}
+BuildRequires:  %{python_module async_generator >= 1.3}
+BuildRequires:  %{python_module flaky >= 3.5.0}
+BuildRequires:  %{python_module hypothesis >= 5.7.1}
+BuildRequires:  %{python_module pytest >= 6.1.0}
+BuildRequires:  %{python_module pytest-asyncio = %{version}}
+BuildRequires:  %{python_module pytest-trio >= 0.7}
+%endif
 %python_subpackages
 
 %description
@@ -55,18 +65,24 @@
 export SETUPTOOLS_SCM_PRETEND_VERSION=%{version}
 %python_build
 
+%if !%{with test}
 %install
 export SETUPTOOLS_SCM_PRETEND_VERSION=%{version}
 %python_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
+%endif
 
+%if %{with test}
 %check
 %pytest
+%endif
 
+%if !%{with test}
 %files %{python_files}
 %doc README.rst
 %license LICENSE
 %{python_sitelib}/pytest_asyncio
 %{python_sitelib}/pytest_asyncio-%{version}*-info
+%endif
 
 %changelog

++++++ _multibuild ++++++
<multibuild>
  <package>test</package>
</multibuild>

++++++ pytest-asyncio-0.17.2.tar.gz -> pytest-asyncio-0.18.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/.github/workflows/main.yml 
new/pytest-asyncio-0.18.3/.github/workflows/main.yml
--- old/pytest-asyncio-0.17.2/.github/workflows/main.yml        2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/.github/workflows/main.yml        2022-03-25 
10:22:08.000000000 +0100
@@ -17,12 +17,12 @@
       version: ${{ steps.version.outputs.version }}
       prerelease: ${{ steps.version.outputs.prerelease }}
     steps:
-    - uses: actions/checkout@v2
+    - uses: actions/checkout@v3
       with:
         fetch-depth: 0
-    - uses: actions/setup-python@v2
+    - uses: actions/setup-python@v3
       with:
-        python-version: '3.9'
+        python-version: '3.10'
     - name: Install GitHub matcher for ActionLint checker
       run: |
         echo "::add-matcher::.github/actionlint-matcher.json"
@@ -58,10 +58,10 @@
         python-version: ['3.7', '3.8', '3.9', '3.10']
 
     steps:
-    - uses: actions/checkout@v2
+    - uses: actions/checkout@v3
       with:
         fetch-depth: 0
-    - uses: actions/setup-python@v2
+    - uses: actions/setup-python@v3
       with:
         python-version: ${{ matrix.python-version }}
     - name: Install dependencies
@@ -103,7 +103,7 @@
       run: |
         sudo apt-get install -y pandoc
     - name: Checkout
-      uses: actions/checkout@v2.4.0
+      uses: actions/checkout@v3
       with:
         fetch-depth: 0
     - name: Download distributions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/CHANGELOG.rst 
new/pytest-asyncio-0.18.3/CHANGELOG.rst
--- old/pytest-asyncio-0.17.2/CHANGELOG.rst     1970-01-01 01:00:00.000000000 
+0100
+++ new/pytest-asyncio-0.18.3/CHANGELOG.rst     2022-03-25 10:22:08.000000000 
+0100
@@ -0,0 +1,163 @@
+=========
+Changelog
+=========
+
+0.18.3 (22-03-25)
+=================
+- Adds `pytest-trio <https://pypi.org/project/pytest-trio/>`_ to the test 
dependencies
+- Fixes a bug that caused pytest-asyncio to try to set up async pytest_trio 
fixtures in strict mode. `#298 
<https://github.com/pytest-dev/pytest-asyncio/issues/298>`_
+
+0.18.2 (22-03-03)
+=================
+- Fix asyncio auto mode not marking static methods. `#295 
<https://github.com/pytest-dev/pytest-asyncio/issues/295>`_
+- Fix a compatibility issue with Hypothesis 6.39.0. `#302 
<https://github.com/pytest-dev/pytest-asyncio/issues/302>`_
+
+0.18.1 (22-02-10)
+=================
+- Fixes a regression that prevented async fixtures from working in synchronous 
tests. `#286 <https://github.com/pytest-dev/pytest-asyncio/issues/286>`_
+
+0.18.0 (22-02-07)
+=================
+
+- Raise a warning if @pytest.mark.asyncio is applied to non-async function. 
`#275 <https://github.com/pytest-dev/pytest-asyncio/issues/275>`_
+- Support parametrized ``event_loop`` fixture. `#278 
<https://github.com/pytest-dev/pytest-asyncio/issues/278>`_
+
+0.17.2 (22-01-17)
+=================
+
+- Require ``typing-extensions`` on Python<3.8 only. `#269 
<https://github.com/pytest-dev/pytest-asyncio/issues/269>`_
+- Fix a regression in tests collection introduced by 0.17.1, the plugin works 
fine with non-python tests again. `#267 
<https://github.com/pytest-dev/pytest-asyncio/issues/267>`_
+
+
+0.17.1 (22-01-16)
+=================
+- Fixes a bug that prevents async Hypothesis tests from working without 
explicit ``asyncio`` marker when ``--asyncio-mode=auto`` is set. `#258 
<https://github.com/pytest-dev/pytest-asyncio/issues/258>`_
+- Fixed a bug that closes the default event loop if the loop doesn't exist 
`#257 <https://github.com/pytest-dev/pytest-asyncio/issues/257>`_
+- Added type annotations. `#198 
<https://github.com/pytest-dev/pytest-asyncio/issues/198>`_
+- Show asyncio mode in pytest report headers. `#266 
<https://github.com/pytest-dev/pytest-asyncio/issues/266>`_
+- Relax ``asyncio_mode`` type definition; it allows to support pytest 6.1+. 
`#262 <https://github.com/pytest-dev/pytest-asyncio/issues/262>`_
+
+0.17.0 (22-01-13)
+=================
+- `pytest-asyncio` no longer alters existing event loop policies. `#168 
<https://github.com/pytest-dev/pytest-asyncio/issues/168>`_, `#188 
<https://github.com/pytest-dev/pytest-asyncio/issues/168>`_
+- Drop support for Python 3.6
+- Fixed an issue when pytest-asyncio was used in combination with `flaky` or 
inherited asynchronous Hypothesis tests. `#178 
<https://github.com/pytest-dev/pytest-asyncio/issues/178>`_ `#231 
<https://github.com/pytest-dev/pytest-asyncio/issues/231>`_
+- Added `flaky <https://pypi.org/project/flaky/>`_ to test dependencies
+- Added ``unused_udp_port`` and ``unused_udp_port_factory`` fixtures (similar 
to ``unused_tcp_port`` and ``unused_tcp_port_factory`` counterparts. `#99 
<https://github.com/pytest-dev/pytest-asyncio/issues/99>`_
+- Added the plugin modes: *strict*, *auto*, and *legacy*. See `documentation 
<https://github.com/pytest-dev/pytest-asyncio#modes>`_ for details. `#125 
<https://github.com/pytest-dev/pytest-asyncio/issues/125>`_
+- Correctly process ``KeyboardInterrupt`` during async fixture setup phase 
`#219 <https://github.com/pytest-dev/pytest-asyncio/issues/219>`_
+
+0.16.0 (2021-10-16)
+===================
+- Add support for Python 3.10
+
+0.15.1 (2021-04-22)
+===================
+- Hotfix for errors while closing event loops while replacing them.
+  `#209 <https://github.com/pytest-dev/pytest-asyncio/issues/209>`_
+  `#210 <https://github.com/pytest-dev/pytest-asyncio/issues/210>`_
+
+0.15.0 (2021-04-19)
+===================
+- Add support for Python 3.9
+- Abandon support for Python 3.5. If you still require support for Python 3.5, 
please use pytest-asyncio v0.14 or earlier.
+- Set ``unused_tcp_port_factory`` fixture scope to 'session'.
+  `#163 <https://github.com/pytest-dev/pytest-asyncio/pull/163>`_
+- Properly close event loops when replacing them.
+  `#208 <https://github.com/pytest-dev/pytest-asyncio/issues/208>`_
+
+0.14.0 (2020-06-24)
+===================
+- Fix `#162 <https://github.com/pytest-dev/pytest-asyncio/issues/162>`_, and 
``event_loop`` fixture behavior now is coherent on all scopes.
+  `#164 <https://github.com/pytest-dev/pytest-asyncio/pull/164>`_
+
+0.12.0 (2020-05-04)
+===================
+- Run the event loop fixture as soon as possible. This helps with fixtures 
that have an implicit dependency on the event loop.
+  `#156 <https://github.com/pytest-dev/pytest-asyncio/pull/156>`_
+
+0.11.0 (2020-04-20)
+===================
+- Test on 3.8, drop 3.3 and 3.4. Stick to 0.10 for these versions.
+  `#152 <https://github.com/pytest-dev/pytest-asyncio/pull/152>`_
+- Use the new Pytest 5.4.0 Function API. We therefore depend on pytest >= 
5.4.0.
+  `#142 <https://github.com/pytest-dev/pytest-asyncio/pull/142>`_
+- Better ``pytest.skip`` support.
+  `#126 <https://github.com/pytest-dev/pytest-asyncio/pull/126>`_
+
+0.10.0 (2019-01-08)
+====================
+- ``pytest-asyncio`` integrates with `Hypothesis 
<https://hypothesis.readthedocs.io>`_
+  to support ``@given`` on async test functions using ``asyncio``.
+  `#102 <https://github.com/pytest-dev/pytest-asyncio/pull/102>`_
+- Pytest 4.1 support.
+  `#105 <https://github.com/pytest-dev/pytest-asyncio/pull/105>`_
+
+0.9.0 (2018-07-28)
+==================
+- Python 3.7 support.
+- Remove ``event_loop_process_pool`` fixture and
+  ``pytest.mark.asyncio_process_pool`` marker (see
+  https://bugs.python.org/issue34075 for deprecation and removal details)
+
+0.8.0 (2017-09-23)
+==================
+- Improve integration with other packages (like aiohttp) with more careful 
event loop handling.
+  `#64 <https://github.com/pytest-dev/pytest-asyncio/pull/64>`_
+
+0.7.0 (2017-09-08)
+==================
+- Python versions pre-3.6 can use the async_generator library for async 
fixtures.
+  `#62 <https://github.com/pytest-dev/pytest-asyncio/pull/62>`
+
+0.6.0 (2017-05-28)
+==================
+- Support for Python versions pre-3.5 has been dropped.
+- ``pytestmark`` now works on both module and class level.
+- The ``forbid_global_loop`` parameter has been removed.
+- Support for async and async gen fixtures has been added.
+  `#45 <https://github.com/pytest-dev/pytest-asyncio/pull/45>`_
+- The deprecation warning regarding ``asyncio.async()`` has been fixed.
+  `#51 <https://github.com/pytest-dev/pytest-asyncio/pull/51>`_
+
+0.5.0 (2016-09-07)
+==================
+- Introduced a changelog.
+  `#31 <https://github.com/pytest-dev/pytest-asyncio/issues/31>`_
+- The ``event_loop`` fixture is again responsible for closing itself.
+  This makes the fixture slightly harder to correctly override, but enables
+  other fixtures to depend on it correctly.
+  `#30 <https://github.com/pytest-dev/pytest-asyncio/issues/30>`_
+- Deal with the event loop policy by wrapping a special pytest hook,
+  ``pytest_fixture_setup``. This allows setting the policy before fixtures
+  dependent on the ``event_loop`` fixture run, thus allowing them to take
+  advantage of the ``forbid_global_loop`` parameter. As a consequence of this,
+  we now depend on pytest 3.0.
+  `#29 <https://github.com/pytest-dev/pytest-asyncio/issues/29>`_
+
+0.4.1 (2016-06-01)
+==================
+- Fix a bug preventing the propagation of exceptions from the plugin.
+  `#25 <https://github.com/pytest-dev/pytest-asyncio/issues/25>`_
+
+0.4.0 (2016-05-30)
+==================
+- Make ``event_loop`` fixtures simpler to override by closing them in the
+  plugin, instead of directly in the fixture.
+  `#21 <https://github.com/pytest-dev/pytest-asyncio/pull/21>`_
+- Introduce the ``forbid_global_loop`` parameter.
+  `#21 <https://github.com/pytest-dev/pytest-asyncio/pull/21>`_
+
+0.3.0 (2015-12-19)
+==================
+- Support for Python 3.5 ``async``/``await`` syntax.
+  `#17 <https://github.com/pytest-dev/pytest-asyncio/pull/17>`_
+
+0.2.0 (2015-08-01)
+==================
+- ``unused_tcp_port_factory`` fixture.
+  `#10 <https://github.com/pytest-dev/pytest-asyncio/issues/10>`_
+
+0.1.1 (2015-04-23)
+==================
+Initial release.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/MANIFEST.in 
new/pytest-asyncio-0.18.3/MANIFEST.in
--- old/pytest-asyncio-0.17.2/MANIFEST.in       1970-01-01 01:00:00.000000000 
+0100
+++ new/pytest-asyncio-0.18.3/MANIFEST.in       2022-03-25 10:22:08.000000000 
+0100
@@ -0,0 +1,5 @@
+include CHANGELOG.rst
+
+recursive-exclude .github *
+exclude .gitignore
+exclude .pre-commit-config.yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/README.rst 
new/pytest-asyncio-0.18.3/README.rst
--- old/pytest-asyncio-0.17.2/README.rst        2022-01-17 16:12:56.000000000 
+0100
+++ new/pytest-asyncio-0.18.3/README.rst        2022-03-25 10:22:08.000000000 
+0100
@@ -69,7 +69,7 @@
    [pytest]
    asyncio_mode = auto
 
-The value can be overriden by command-line option for ``pytest`` invocation:
+The value can be overridden by command-line option for ``pytest`` invocation:
 
 .. code-block:: bash
 
@@ -91,7 +91,7 @@
 This mode requires the simplest tests and fixtures configuration and is
 recommended for default usage *unless* the same project and its test suite 
should
 execute tests from different async frameworks, e.g. ``asyncio`` and ``trio``.  
In this
-case, auto-handling can break tests designed for other framework; plase use 
*strict*
+case, auto-handling can break tests designed for other framework; please use 
*strict*
 mode instead.
 
 Strict mode
@@ -254,153 +254,6 @@
 are recommended to use `unitest.IsolatedAsyncioTestCase 
<https://docs.python.org/3/library/unittest.html#unittest.IsolatedAsyncioTestCase>`__
 or an async framework such as `asynctest 
<https://asynctest.readthedocs.io/en/latest>`__.
 
-Changelog
----------
-
-0.17.2 (22-01-17)
-~~~~~~~~~~~~~~~~~~~
-
-- Require ``typing-extensions`` on Python<3.8 only. `#269 
<https://github.com/pytest-dev/pytest-asyncio/issues/269>`_
-- Fix a regression in tests collection introduced by 0.17.1, the plugin works 
fine with non-python tests again. `#267 
<https://github.com/pytest-dev/pytest-asyncio/issues/267>`_
-
-
-0.17.1 (22-01-16)
-~~~~~~~~~~~~~~~~~~~
-- Fixes a bug that prevents async Hypothesis tests from working without 
explicit ``asyncio`` marker when ``--asyncio-mode=auto`` is set. `#258 
<https://github.com/pytest-dev/pytest-asyncio/issues/258>`_
-- Fixed a bug that closes the default event loop if the loop doesn't exist 
`#257 <https://github.com/pytest-dev/pytest-asyncio/issues/257>`_
-- Added type annotations. `#198 
<https://github.com/pytest-dev/pytest-asyncio/issues/198>`_
-- Show asyncio mode in pytest report headers. `#266 
<https://github.com/pytest-dev/pytest-asyncio/issues/266>`_
-- Relax ``asyncio_mode`` type definition; it allows to support pytest 6.1+. 
`#262 <https://github.com/pytest-dev/pytest-asyncio/issues/262>`_
-
-0.17.0 (22-01-13)
-~~~~~~~~~~~~~~~~~~~
-- `pytest-asyncio` no longer alters existing event loop policies. `#168 
<https://github.com/pytest-dev/pytest-asyncio/issues/168>`_, `#188 
<https://github.com/pytest-dev/pytest-asyncio/issues/168>`_
-- Drop support for Python 3.6
-- Fixed an issue when pytest-asyncio was used in combination with `flaky` or 
inherited asynchronous Hypothesis tests. `#178 
<https://github.com/pytest-dev/pytest-asyncio/issues/178>`_ `#231 
<https://github.com/pytest-dev/pytest-asyncio/issues/231>`_
-- Added `flaky <https://pypi.org/project/flaky/>`_ to test dependencies
-- Added ``unused_udp_port`` and ``unused_udp_port_factory`` fixtures (similar 
to ``unused_tcp_port`` and ``unused_tcp_port_factory`` counterparts. `#99 
<https://github.com/pytest-dev/pytest-asyncio/issues/99>`_
-- Added the plugin modes: *strict*, *auto*, and *legacy*. See `documentation 
<https://github.com/pytest-dev/pytest-asyncio#modes>`_ for details. `#125 
<https://github.com/pytest-dev/pytest-asyncio/issues/125>`_
-- Correctly process ``KeyboardInterrupt`` during async fixture setup phase 
`#219 <https://github.com/pytest-dev/pytest-asyncio/issues/219>`_
-
-0.16.0 (2021-10-16)
-~~~~~~~~~~~~~~~~~~~
-- Add support for Python 3.10
-
-0.15.1 (2021-04-22)
-~~~~~~~~~~~~~~~~~~~
-- Hotfix for errors while closing event loops while replacing them.
-  `#209 <https://github.com/pytest-dev/pytest-asyncio/issues/209>`_
-  `#210 <https://github.com/pytest-dev/pytest-asyncio/issues/210>`_
-
-0.15.0 (2021-04-19)
-~~~~~~~~~~~~~~~~~~~
-- Add support for Python 3.9
-- Abandon support for Python 3.5. If you still require support for Python 3.5, 
please use pytest-asyncio v0.14 or earlier.
-- Set ``unused_tcp_port_factory`` fixture scope to 'session'.
-  `#163 <https://github.com/pytest-dev/pytest-asyncio/pull/163>`_
-- Properly close event loops when replacing them.
-  `#208 <https://github.com/pytest-dev/pytest-asyncio/issues/208>`_
-
-0.14.0 (2020-06-24)
-~~~~~~~~~~~~~~~~~~~
-- Fix `#162 <https://github.com/pytest-dev/pytest-asyncio/issues/162>`_, and 
``event_loop`` fixture behavior now is coherent on all scopes.
-  `#164 <https://github.com/pytest-dev/pytest-asyncio/pull/164>`_
-
-0.12.0 (2020-05-04)
-~~~~~~~~~~~~~~~~~~~
-- Run the event loop fixture as soon as possible. This helps with fixtures 
that have an implicit dependency on the event loop.
-  `#156 <https://github.com/pytest-dev/pytest-asyncio/pull/156>`_
-
-0.11.0 (2020-04-20)
-~~~~~~~~~~~~~~~~~~~
-- Test on 3.8, drop 3.3 and 3.4. Stick to 0.10 for these versions.
-  `#152 <https://github.com/pytest-dev/pytest-asyncio/pull/152>`_
-- Use the new Pytest 5.4.0 Function API. We therefore depend on pytest >= 
5.4.0.
-  `#142 <https://github.com/pytest-dev/pytest-asyncio/pull/142>`_
-- Better ``pytest.skip`` support.
-  `#126 <https://github.com/pytest-dev/pytest-asyncio/pull/126>`_
-
-0.10.0 (2019-01-08)
-~~~~~~~~~~~~~~~~~~~~
-- ``pytest-asyncio`` integrates with `Hypothesis 
<https://hypothesis.readthedocs.io>`_
-  to support ``@given`` on async test functions using ``asyncio``.
-  `#102 <https://github.com/pytest-dev/pytest-asyncio/pull/102>`_
-- Pytest 4.1 support.
-  `#105 <https://github.com/pytest-dev/pytest-asyncio/pull/105>`_
-
-0.9.0 (2018-07-28)
-~~~~~~~~~~~~~~~~~~
-- Python 3.7 support.
-- Remove ``event_loop_process_pool`` fixture and
-  ``pytest.mark.asyncio_process_pool`` marker (see
-  https://bugs.python.org/issue34075 for deprecation and removal details)
-
-0.8.0 (2017-09-23)
-~~~~~~~~~~~~~~~~~~
-- Improve integration with other packages (like aiohttp) with more careful 
event loop handling.
-  `#64 <https://github.com/pytest-dev/pytest-asyncio/pull/64>`_
-
-0.7.0 (2017-09-08)
-~~~~~~~~~~~~~~~~~~
-- Python versions pre-3.6 can use the async_generator library for async 
fixtures.
-  `#62 <https://github.com/pytest-dev/pytest-asyncio/pull/62>`
-
-
-0.6.0 (2017-05-28)
-~~~~~~~~~~~~~~~~~~
-- Support for Python versions pre-3.5 has been dropped.
-- ``pytestmark`` now works on both module and class level.
-- The ``forbid_global_loop`` parameter has been removed.
-- Support for async and async gen fixtures has been added.
-  `#45 <https://github.com/pytest-dev/pytest-asyncio/pull/45>`_
-- The deprecation warning regarding ``asyncio.async()`` has been fixed.
-  `#51 <https://github.com/pytest-dev/pytest-asyncio/pull/51>`_
-
-0.5.0 (2016-09-07)
-~~~~~~~~~~~~~~~~~~
-- Introduced a changelog.
-  `#31 <https://github.com/pytest-dev/pytest-asyncio/issues/31>`_
-- The ``event_loop`` fixture is again responsible for closing itself.
-  This makes the fixture slightly harder to correctly override, but enables
-  other fixtures to depend on it correctly.
-  `#30 <https://github.com/pytest-dev/pytest-asyncio/issues/30>`_
-- Deal with the event loop policy by wrapping a special pytest hook,
-  ``pytest_fixture_setup``. This allows setting the policy before fixtures
-  dependent on the ``event_loop`` fixture run, thus allowing them to take
-  advantage of the ``forbid_global_loop`` parameter. As a consequence of this,
-  we now depend on pytest 3.0.
-  `#29 <https://github.com/pytest-dev/pytest-asyncio/issues/29>`_
-
-
-0.4.1 (2016-06-01)
-~~~~~~~~~~~~~~~~~~
-- Fix a bug preventing the propagation of exceptions from the plugin.
-  `#25 <https://github.com/pytest-dev/pytest-asyncio/issues/25>`_
-
-0.4.0 (2016-05-30)
-~~~~~~~~~~~~~~~~~~
-- Make ``event_loop`` fixtures simpler to override by closing them in the
-  plugin, instead of directly in the fixture.
-  `#21 <https://github.com/pytest-dev/pytest-asyncio/pull/21>`_
-- Introduce the ``forbid_global_loop`` parameter.
-  `#21 <https://github.com/pytest-dev/pytest-asyncio/pull/21>`_
-
-0.3.0 (2015-12-19)
-~~~~~~~~~~~~~~~~~~
-- Support for Python 3.5 ``async``/``await`` syntax.
-  `#17 <https://github.com/pytest-dev/pytest-asyncio/pull/17>`_
-
-0.2.0 (2015-08-01)
-~~~~~~~~~~~~~~~~~~
-- ``unused_tcp_port_factory`` fixture.
-  `#10 <https://github.com/pytest-dev/pytest-asyncio/issues/10>`_
-
-
-0.1.1 (2015-04-23)
-~~~~~~~~~~~~~~~~~~
-Initial release.
-
-
 Contributing
 ------------
 Contributions are very welcome. Tests can be run with ``tox``, please ensure
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/pyproject.toml 
new/pytest-asyncio-0.18.3/pyproject.toml
--- old/pytest-asyncio-0.17.2/pyproject.toml    2022-01-17 16:12:56.000000000 
+0100
+++ new/pytest-asyncio-0.18.3/pyproject.toml    2022-03-25 10:22:08.000000000 
+0100
@@ -2,7 +2,7 @@
 requires = [
   "setuptools>=51.0",
   "wheel>=0.36",
-  "setuptools_scm>=6.2"
+  "setuptools_scm[toml]>=6.2"
 ]
 build-backend = "setuptools.build_meta"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/pytest_asyncio/plugin.py 
new/pytest-asyncio-0.18.3/pytest_asyncio/plugin.py
--- old/pytest-asyncio-0.17.2/pytest_asyncio/plugin.py  2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/pytest_asyncio/plugin.py  2022-03-25 
10:22:08.000000000 +0100
@@ -165,7 +165,7 @@
 
 def _is_coroutine(obj: Any) -> bool:
     """Check to see if an object is really an asyncio coroutine."""
-    return asyncio.iscoroutinefunction(obj) or inspect.isgeneratorfunction(obj)
+    return asyncio.iscoroutinefunction(obj)
 
 
 def _is_coroutine_or_asyncgen(obj: Any) -> bool:
@@ -198,6 +198,122 @@
     return [f"asyncio: mode={mode}"]
 
 
+def _preprocess_async_fixtures(config: Config, holder: Set[FixtureDef]) -> 
None:
+    asyncio_mode = _get_asyncio_mode(config)
+    fixturemanager = config.pluginmanager.get_plugin("funcmanage")
+    for fixtures in fixturemanager._arg2fixturedefs.values():
+        for fixturedef in fixtures:
+            if fixturedef is holder:
+                continue
+            func = fixturedef.func
+            if not _is_coroutine_or_asyncgen(func):
+                # Nothing to do with a regular fixture function
+                continue
+            if not _has_explicit_asyncio_mark(func):
+                if asyncio_mode == Mode.STRICT:
+                    # Ignore async fixtures without explicit asyncio mark in 
strict mode
+                    # This applies to pytest_trio fixtures, for example
+                    continue
+                elif asyncio_mode == Mode.AUTO:
+                    # Enforce asyncio mode if 'auto'
+                    _set_explicit_asyncio_mark(func)
+                elif asyncio_mode == Mode.LEGACY:
+                    _set_explicit_asyncio_mark(func)
+                    try:
+                        code = func.__code__
+                    except AttributeError:
+                        code = func.__func__.__code__
+                    name = (
+                        f"<fixture {func.__qualname__}, 
file={code.co_filename}, "
+                        f"line={code.co_firstlineno}>"
+                    )
+                    warnings.warn(
+                        LEGACY_ASYNCIO_FIXTURE.format(name=name),
+                        DeprecationWarning,
+                    )
+
+            to_add = []
+            for name in ("request", "event_loop"):
+                if name not in fixturedef.argnames:
+                    to_add.append(name)
+
+            if to_add:
+                fixturedef.argnames += tuple(to_add)
+
+            if inspect.isasyncgenfunction(func):
+                fixturedef.func = _wrap_asyncgen(func)
+            elif inspect.iscoroutinefunction(func):
+                fixturedef.func = _wrap_async(func)
+
+            assert _has_explicit_asyncio_mark(fixturedef.func)
+            holder.add(fixturedef)
+
+
+def _add_kwargs(
+    func: Callable[..., Any],
+    kwargs: Dict[str, Any],
+    event_loop: asyncio.AbstractEventLoop,
+    request: SubRequest,
+) -> Dict[str, Any]:
+    sig = inspect.signature(func)
+    ret = kwargs.copy()
+    if "request" in sig.parameters:
+        ret["request"] = request
+    if "event_loop" in sig.parameters:
+        ret["event_loop"] = event_loop
+    return ret
+
+
+def _wrap_asyncgen(func: Callable[..., AsyncIterator[_R]]) -> Callable[..., 
_R]:
+    @functools.wraps(func)
+    def _asyncgen_fixture_wrapper(
+        event_loop: asyncio.AbstractEventLoop, request: SubRequest, **kwargs: 
Any
+    ) -> _R:
+        gen_obj = func(**_add_kwargs(func, kwargs, event_loop, request))
+
+        async def setup() -> _R:
+            res = await gen_obj.__anext__()
+            return res
+
+        def finalizer() -> None:
+            """Yield again, to finalize."""
+
+            async def async_finalizer() -> None:
+                try:
+                    await gen_obj.__anext__()
+                except StopAsyncIteration:
+                    pass
+                else:
+                    msg = "Async generator fixture didn't stop."
+                    msg += "Yield only once."
+                    raise ValueError(msg)
+
+            event_loop.run_until_complete(async_finalizer())
+
+        result = event_loop.run_until_complete(setup())
+        request.addfinalizer(finalizer)
+        return result
+
+    return _asyncgen_fixture_wrapper
+
+
+def _wrap_async(func: Callable[..., Awaitable[_R]]) -> Callable[..., _R]:
+    @functools.wraps(func)
+    def _async_fixture_wrapper(
+        event_loop: asyncio.AbstractEventLoop, request: SubRequest, **kwargs: 
Any
+    ) -> _R:
+        async def setup() -> _R:
+            res = await func(**_add_kwargs(func, kwargs, event_loop, request))
+            return res
+
+        return event_loop.run_until_complete(setup())
+
+    return _async_fixture_wrapper
+
+
+_HOLDER: Set[FixtureDef] = set()
+
+
 @pytest.mark.tryfirst
 def pytest_pycollect_makeitem(
     collector: Union[pytest.Module, pytest.Class], name: str, obj: object
@@ -207,13 +323,18 @@
     """A pytest hook to collect asyncio coroutines."""
     if not collector.funcnamefilter(name):
         return None
+    _preprocess_async_fixtures(collector.config, _HOLDER)
+    if isinstance(obj, staticmethod):
+        # staticmethods need to be unwrapped.
+        obj = obj.__func__
     if (
         _is_coroutine(obj)
         or _is_hypothesis_test(obj)
         and _hypothesis_test_wraps_coroutine(obj)
     ):
         item = pytest.Function.from_parent(collector, name=name)
-        if "asyncio" in item.keywords:
+        marker = item.get_closest_marker("asyncio")
+        if marker is not None:
             return list(collector._genfunctions(name, obj))
         else:
             if _get_asyncio_mode(item.config) == Mode.AUTO:
@@ -229,32 +350,6 @@
     return _is_coroutine(function.hypothesis.inner_test)
 
 
-class FixtureStripper:
-    """Include additional Fixture, and then strip them"""
-
-    REQUEST = "request"
-    EVENT_LOOP = "event_loop"
-
-    def __init__(self, fixturedef: FixtureDef) -> None:
-        self.fixturedef = fixturedef
-        self.to_strip: Set[str] = set()
-
-    def add(self, name: str) -> None:
-        """Add fixture name to fixturedef
-        and record in to_strip list (If not previously included)"""
-        if name in self.fixturedef.argnames:
-            return
-        self.fixturedef.argnames += (name,)
-        self.to_strip.add(name)
-
-    def get_and_strip_from(self, name: str, data_dict: Dict[str, _T]) -> _T:
-        """Strip name from data, and return value"""
-        result = data_dict[name]
-        if name in self.to_strip:
-            del data_dict[name]
-        return result
-
-
 @pytest.hookimpl(trylast=True)
 def pytest_fixture_post_finalizer(fixturedef: FixtureDef, request: SubRequest) 
-> None:
     """Called after fixture teardown"""
@@ -291,99 +386,6 @@
         policy.set_event_loop(loop)
         return
 
-    func = fixturedef.func
-    if not _is_coroutine_or_asyncgen(func):
-        # Nothing to do with a regular fixture function
-        yield
-        return
-
-    config = request.node.config
-    asyncio_mode = _get_asyncio_mode(config)
-
-    if not _has_explicit_asyncio_mark(func):
-        if asyncio_mode == Mode.AUTO:
-            # Enforce asyncio mode if 'auto'
-            _set_explicit_asyncio_mark(func)
-        elif asyncio_mode == Mode.LEGACY:
-            _set_explicit_asyncio_mark(func)
-            try:
-                code = func.__code__
-            except AttributeError:
-                code = func.__func__.__code__
-            name = (
-                f"<fixture {func.__qualname__}, file={code.co_filename}, "
-                f"line={code.co_firstlineno}>"
-            )
-            warnings.warn(
-                LEGACY_ASYNCIO_FIXTURE.format(name=name),
-                DeprecationWarning,
-            )
-        else:
-            # asyncio_mode is STRICT,
-            # don't handle fixtures that are not explicitly marked
-            yield
-            return
-
-    if inspect.isasyncgenfunction(func):
-        # This is an async generator function. Wrap it accordingly.
-        generator = func
-
-        fixture_stripper = FixtureStripper(fixturedef)
-        fixture_stripper.add(FixtureStripper.EVENT_LOOP)
-        fixture_stripper.add(FixtureStripper.REQUEST)
-
-        def wrapper(*args, **kwargs):
-            loop = fixture_stripper.get_and_strip_from(
-                FixtureStripper.EVENT_LOOP, kwargs
-            )
-            request = fixture_stripper.get_and_strip_from(
-                FixtureStripper.REQUEST, kwargs
-            )
-
-            gen_obj = generator(*args, **kwargs)
-
-            async def setup():
-                res = await gen_obj.__anext__()
-                return res
-
-            def finalizer():
-                """Yield again, to finalize."""
-
-                async def async_finalizer():
-                    try:
-                        await gen_obj.__anext__()
-                    except StopAsyncIteration:
-                        pass
-                    else:
-                        msg = "Async generator fixture didn't stop."
-                        msg += "Yield only once."
-                        raise ValueError(msg)
-
-                loop.run_until_complete(async_finalizer())
-
-            result = loop.run_until_complete(setup())
-            request.addfinalizer(finalizer)
-            return result
-
-        fixturedef.func = wrapper
-    elif inspect.iscoroutinefunction(func):
-        coro = func
-
-        fixture_stripper = FixtureStripper(fixturedef)
-        fixture_stripper.add(FixtureStripper.EVENT_LOOP)
-
-        def wrapper(*args, **kwargs):
-            loop = fixture_stripper.get_and_strip_from(
-                FixtureStripper.EVENT_LOOP, kwargs
-            )
-
-            async def setup():
-                res = await coro(*args, **kwargs)
-                return res
-
-            return loop.run_until_complete(setup())
-
-        fixturedef.func = wrapper
     yield
 
 
@@ -395,16 +397,19 @@
     Wraps marked tests in a synchronous function
     where the wrapped test coroutine is executed in an event loop.
     """
-    if "asyncio" in pyfuncitem.keywords:
+    marker = pyfuncitem.get_closest_marker("asyncio")
+    if marker is not None:
         funcargs: Dict[str, object] = pyfuncitem.funcargs  # type: 
ignore[name-defined]
         loop = cast(asyncio.AbstractEventLoop, funcargs["event_loop"])
         if _is_hypothesis_test(pyfuncitem.obj):
             pyfuncitem.obj.hypothesis.inner_test = wrap_in_sync(
+                pyfuncitem,
                 pyfuncitem.obj.hypothesis.inner_test,
                 _loop=loop,
             )
         else:
             pyfuncitem.obj = wrap_in_sync(
+                pyfuncitem,
                 pyfuncitem.obj,
                 _loop=loop,
             )
@@ -415,7 +420,11 @@
     return getattr(function, "is_hypothesis_test", False)
 
 
-def wrap_in_sync(func: Callable[..., Awaitable[Any]], _loop: 
asyncio.AbstractEventLoop):
+def wrap_in_sync(
+    pyfuncitem: pytest.Function,
+    func: Callable[..., Awaitable[Any]],
+    _loop: asyncio.AbstractEventLoop,
+):
     """Return a sync wrapper around an async function executing it in the
     current event loop."""
 
@@ -427,36 +436,46 @@
         func = raw_func
 
     @functools.wraps(func)
-    def inner(**kwargs):
-        coro = func(**kwargs)
-        if coro is not None:
-            task = asyncio.ensure_future(coro, loop=_loop)
-            try:
-                _loop.run_until_complete(task)
-            except BaseException:
-                # run_until_complete doesn't get the result from exceptions
-                # that are not subclasses of `Exception`. Consume all
-                # exceptions to prevent asyncio's warning from logging.
-                if task.done() and not task.cancelled():
-                    task.exception()
-                raise
+    def inner(*args, **kwargs):
+        coro = func(*args, **kwargs)
+        if not inspect.isawaitable(coro):
+            pyfuncitem.warn(
+                pytest.PytestWarning(
+                    f"The test {pyfuncitem} is marked with 
'@pytest.mark.asyncio' "
+                    "but it is not an async function. "
+                    "Please remove asyncio marker. "
+                    "If the test is not marked explicitly, "
+                    "check for global markers applied via 'pytestmark'."
+                )
+            )
+            return
+        task = asyncio.ensure_future(coro, loop=_loop)
+        try:
+            _loop.run_until_complete(task)
+        except BaseException:
+            # run_until_complete doesn't get the result from exceptions
+            # that are not subclasses of `Exception`. Consume all
+            # exceptions to prevent asyncio's warning from logging.
+            if task.done() and not task.cancelled():
+                task.exception()
+            raise
 
     inner._raw_test_func = func  # type: ignore[attr-defined]
     return inner
 
 
 def pytest_runtest_setup(item: pytest.Item) -> None:
-    if "asyncio" in item.keywords:
-        fixturenames = item.fixturenames  # type: ignore[attr-defined]
-        # inject an event loop fixture for all async tests
-        if "event_loop" in fixturenames:
-            fixturenames.remove("event_loop")
-        fixturenames.insert(0, "event_loop")
-    obj = getattr(item, 'obj', None)
-    if (
-        item.get_closest_marker("asyncio") is not None
-        and not getattr(obj, "hypothesis", False)
-        and getattr(obj, "is_hypothesis_test", False)
+    marker = item.get_closest_marker("asyncio")
+    if marker is None:
+        return
+    fixturenames = item.fixturenames  # type: ignore[attr-defined]
+    # inject an event loop fixture for all async tests
+    if "event_loop" in fixturenames:
+        fixturenames.remove("event_loop")
+    fixturenames.insert(0, "event_loop")
+    obj = getattr(item, "obj", None)
+    if not getattr(obj, "hypothesis", False) and getattr(
+        obj, "is_hypothesis_test", False
     ):
         pytest.fail(
             "test function `%r` is using Hypothesis, but pytest-asyncio "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/setup.cfg 
new/pytest-asyncio-0.18.3/setup.cfg
--- old/pytest-asyncio-0.17.2/setup.cfg 2022-01-17 16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/setup.cfg 2022-03-25 10:22:08.000000000 +0100
@@ -34,12 +34,9 @@
 packages = find:
 include_package_data = True
 
-setup_requires =
-  setuptools_scm >= 6.2
-
 install_requires =
   pytest >= 6.1.0
-  typing-extensions >= 4.0; python_version < "3.8"
+  typing-extensions >= 3.7.2; python_version < "3.8"
 
 [options.extras_require]
 testing =
@@ -47,6 +44,7 @@
   hypothesis >= 5.7.1
   flaky >= 3.5.0
   mypy == 0.931
+  pytest-trio >= 0.7.0
 
 [options.entry_points]
 pytest11 =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-asyncio-0.17.2/tests/async_fixtures/test_parametrized_loop.py 
new/pytest-asyncio-0.18.3/tests/async_fixtures/test_parametrized_loop.py
--- old/pytest-asyncio-0.17.2/tests/async_fixtures/test_parametrized_loop.py    
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/async_fixtures/test_parametrized_loop.py    
2022-03-25 10:22:08.000000000 +0100
@@ -0,0 +1,31 @@
+import asyncio
+
+import pytest
+
+TESTS_COUNT = 0
+
+
+def teardown_module():
+    # parametrized 2 * 2 times: 2 for 'event_loop' and 2 for 'fix'
+    assert TESTS_COUNT == 4
+
+
+@pytest.fixture(scope="module", params=[1, 2])
+def event_loop(request):
+    request.param
+    loop = asyncio.new_event_loop()
+    yield loop
+    loop.close()
+
+
+@pytest.fixture(params=["a", "b"])
+async def fix(request):
+    await asyncio.sleep(0)
+    return request.param
+
+
+@pytest.mark.asyncio
+async def test_parametrized_loop(fix):
+    await asyncio.sleep(0)
+    global TESTS_COUNT
+    TESTS_COUNT += 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-asyncio-0.17.2/tests/loop_fixture_scope/conftest.py 
new/pytest-asyncio-0.18.3/tests/loop_fixture_scope/conftest.py
--- old/pytest-asyncio-0.17.2/tests/loop_fixture_scope/conftest.py      
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/loop_fixture_scope/conftest.py      
2022-03-25 10:22:08.000000000 +0100
@@ -0,0 +1,17 @@
+import asyncio
+
+import pytest
+
+
+class CustomSelectorLoop(asyncio.SelectorEventLoop):
+    """A subclass with no overrides, just to test for presence."""
+
+
+loop = CustomSelectorLoop()
+
+
+@pytest.fixture(scope="module")
+def event_loop():
+    """Create an instance of the default event loop for each test case."""
+    yield loop
+    loop.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-asyncio-0.17.2/tests/loop_fixture_scope/test_loop_fixture_scope.py 
new/pytest-asyncio-0.18.3/tests/loop_fixture_scope/test_loop_fixture_scope.py
--- 
old/pytest-asyncio-0.17.2/tests/loop_fixture_scope/test_loop_fixture_scope.py   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/pytest-asyncio-0.18.3/tests/loop_fixture_scope/test_loop_fixture_scope.py   
    2022-03-25 10:22:08.000000000 +0100
@@ -0,0 +1,16 @@
+"""Unit tests for overriding the event loop with a larger scoped one."""
+import asyncio
+
+import pytest
+
+
+@pytest.mark.asyncio
+async def test_for_custom_loop():
+    """This test should be executed using the custom loop."""
+    await asyncio.sleep(0.01)
+    assert type(asyncio.get_event_loop()).__name__ == "CustomSelectorLoop"
+
+
+@pytest.mark.asyncio
+async def test_dependent_fixture(dependent_fixture):
+    await asyncio.sleep(0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tests/modes/test_auto_mode.py 
new/pytest-asyncio-0.18.3/tests/modes/test_auto_mode.py
--- old/pytest-asyncio-0.17.2/tests/modes/test_auto_mode.py     2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/modes/test_auto_mode.py     2022-03-25 
10:22:08.000000000 +0100
@@ -87,3 +87,53 @@
     )
     result = testdir.runpytest("--asyncio-mode=auto")
     result.assert_outcomes(passed=1)
+
+
+def test_auto_mode_static_method(testdir):
+    testdir.makepyfile(
+        dedent(
+            """\
+        import asyncio
+
+        pytest_plugins = 'pytest_asyncio'
+
+
+        class TestA:
+
+            @staticmethod
+            async def test_a():
+                await asyncio.sleep(0)
+        """
+        )
+    )
+    result = testdir.runpytest("--asyncio-mode=auto")
+    result.assert_outcomes(passed=1)
+
+
+def test_auto_mode_static_method_fixture(testdir):
+    testdir.makepyfile(
+        dedent(
+            """\
+        import asyncio
+        import pytest
+
+        pytest_plugins = 'pytest_asyncio'
+
+
+        class TestA:
+
+            @staticmethod
+            @pytest.fixture
+            async def fixture_a():
+                await asyncio.sleep(0)
+                return 1
+
+            @staticmethod
+            async def test_a(fixture_a):
+                await asyncio.sleep(0)
+                assert fixture_a == 1
+        """
+        )
+    )
+    result = testdir.runpytest("--asyncio-mode=auto")
+    result.assert_outcomes(passed=1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tests/sessionloop/conftest.py 
new/pytest-asyncio-0.18.3/tests/sessionloop/conftest.py
--- old/pytest-asyncio-0.17.2/tests/sessionloop/conftest.py     2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/sessionloop/conftest.py     1970-01-01 
01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-import asyncio
-
-import pytest
-
-
-class CustomSelectorLoopSession(asyncio.SelectorEventLoop):
-    """A subclass with no overrides, just to test for presence."""
-
-
-loop = CustomSelectorLoopSession()
-
-
-@pytest.fixture(scope="package")
-def event_loop():
-    """Create an instance of the default event loop for each test case."""
-    yield loop
-    loop.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest-asyncio-0.17.2/tests/sessionloop/test_session_loops.py 
new/pytest-asyncio-0.18.3/tests/sessionloop/test_session_loops.py
--- old/pytest-asyncio-0.17.2/tests/sessionloop/test_session_loops.py   
2022-01-17 16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/sessionloop/test_session_loops.py   
1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-"""Unit tests for overriding the event loop with a session scoped one."""
-import asyncio
-
-import pytest
-
-
-@pytest.mark.asyncio
-async def test_for_custom_loop():
-    """This test should be executed using the custom loop."""
-    await asyncio.sleep(0.01)
-    assert type(asyncio.get_event_loop()).__name__ == 
"CustomSelectorLoopSession"
-
-
-@pytest.mark.asyncio
-async def test_dependent_fixture(dependent_fixture):
-    await asyncio.sleep(0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tests/test_asyncio_fixture.py 
new/pytest-asyncio-0.18.3/tests/test_asyncio_fixture.py
--- old/pytest-asyncio-0.17.2/tests/test_asyncio_fixture.py     2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/test_asyncio_fixture.py     2022-03-25 
10:22:08.000000000 +0100
@@ -1,4 +1,5 @@
 import asyncio
+from textwrap import dedent
 
 import pytest
 
@@ -39,3 +40,25 @@
 async def test_fixture_with_params(fixture_with_params):
     await asyncio.sleep(0)
     assert fixture_with_params % 2 == 0
+
+
+@pytest.mark.parametrize("mode", ("auto", "strict", "legacy"))
+def test_sync_function_uses_async_fixture(testdir, mode):
+    testdir.makepyfile(
+        dedent(
+            """\
+        import pytest_asyncio
+
+        pytest_plugins = 'pytest_asyncio'
+
+        @pytest_asyncio.fixture
+        async def always_true():
+            return True
+
+        def test_sync_function_uses_async_fixture(always_true):
+           assert always_true is True
+        """
+        )
+    )
+    result = testdir.runpytest(f"--asyncio-mode={mode}")
+    result.assert_outcomes(passed=1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tests/test_simple.py 
new/pytest-asyncio-0.18.3/tests/test_simple.py
--- old/pytest-asyncio-0.17.2/tests/test_simple.py      2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/test_simple.py      2022-03-25 
10:22:08.000000000 +0100
@@ -1,5 +1,6 @@
 """Quick'n'dirty unit tests for provided fixtures and markers."""
 import asyncio
+from textwrap import dedent
 
 import pytest
 
@@ -26,14 +27,14 @@
 
 @pytest.mark.xfail(reason="need a failure", strict=True)
 @pytest.mark.asyncio
-def test_asyncio_marker_fail():
+async def test_asyncio_marker_fail():
     raise AssertionError
 
 
 @pytest.mark.asyncio
-def test_asyncio_marker_with_default_param(a_param=None):
+async def test_asyncio_marker_with_default_param(a_param=None):
     """Test the asyncio pytest marker."""
-    yield  # sleep(0)
+    await asyncio.sleep(0)
 
 
 @pytest.mark.asyncio
@@ -240,3 +241,35 @@
 def test_async_close_loop(event_loop):
     event_loop.close()
     return "ok"
+
+
+def test_warn_asyncio_marker_for_regular_func(testdir):
+    testdir.makepyfile(
+        dedent(
+            """\
+        import pytest
+
+        pytest_plugins = 'pytest_asyncio'
+
+        @pytest.mark.asyncio
+        def test_a():
+            pass
+        """
+        )
+    )
+    testdir.makefile(
+        ".ini",
+        pytest=dedent(
+            """\
+        [pytest]
+        asyncio_mode = strict
+        filterwarnings =
+            default
+    """
+        ),
+    )
+    result = testdir.runpytest()
+    result.assert_outcomes(passed=1)
+    result.stdout.fnmatch_lines(
+        ["*is marked with '@pytest.mark.asyncio' but it is not an async 
function.*"]
+    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tests/test_subprocess.py 
new/pytest-asyncio-0.18.3/tests/test_subprocess.py
--- old/pytest-asyncio-0.17.2/tests/test_subprocess.py  2022-01-17 
16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/test_subprocess.py  2022-03-25 
10:22:08.000000000 +0100
@@ -15,17 +15,20 @@
         loop.close()
 
 
-@pytest.mark.asyncio(forbid_global_loop=False)
-async def test_subprocess(event_loop):
-    """Starting a subprocess should be possible."""
-    proc = await asyncio.subprocess.create_subprocess_exec(
-        sys.executable, "--version", stdout=asyncio.subprocess.PIPE
-    )
-    await proc.communicate()
-
+@pytest.mark.skipif(
+    sys.version_info < (3, 8),
+    reason="""
+        When run with Python 3.7 asyncio.subprocess.create_subprocess_exec 
seems to be
+        affected by an issue that prevents correct cleanup. Tests using 
pytest-trio
+        will report that signal handling is already performed by another 
library and
+        fail. [1] This is possibly a bug in CPython 3.7, so we ignore this 
test for
+        that Python version.
 
-@pytest.mark.asyncio(forbid_global_loop=True)
-async def test_subprocess_forbid(event_loop):
+        [1] https://github.com/python-trio/pytest-trio/issues/126
+    """,
+)
+@pytest.mark.asyncio
+async def test_subprocess(event_loop):
     """Starting a subprocess should be possible."""
     proc = await asyncio.subprocess.create_subprocess_exec(
         sys.executable, "--version", stdout=asyncio.subprocess.PIPE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tests/trio/test_fixtures.py 
new/pytest-asyncio-0.18.3/tests/trio/test_fixtures.py
--- old/pytest-asyncio-0.17.2/tests/trio/test_fixtures.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tests/trio/test_fixtures.py       2022-03-25 
10:22:08.000000000 +0100
@@ -0,0 +1,25 @@
+from textwrap import dedent
+
+
+def test_strict_mode_ignores_trio_fixtures(testdir):
+    testdir.makepyfile(
+        dedent(
+            """\
+        import pytest
+        import pytest_asyncio
+        import pytest_trio
+
+        pytest_plugins = ["pytest_asyncio", "pytest_trio"]
+
+        @pytest_trio.trio_fixture
+        async def any_fixture():
+            return True
+
+        @pytest.mark.trio
+        async def test_anything(any_fixture):
+            pass
+        """
+        )
+    )
+    result = testdir.runpytest("--asyncio-mode=strict")
+    result.assert_outcomes(passed=1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-asyncio-0.17.2/tox.ini 
new/pytest-asyncio-0.18.3/tox.ini
--- old/pytest-asyncio-0.17.2/tox.ini   2022-01-17 16:12:56.000000000 +0100
+++ new/pytest-asyncio-0.18.3/tox.ini   2022-03-25 10:22:08.000000000 +0100
@@ -1,7 +1,7 @@
 [tox]
 minversion = 3.14.0
 envlist = py37, py38, py39, py310, lint, version-info, pytest-min
-skip_missing_interpreters = true
+isolated_build = true
 passenv =
     CI
 
@@ -22,7 +22,6 @@
     make
 
 [testenv:lint]
-skip_install = true
 basepython = python3.10
 extras = testing
 deps =
@@ -40,7 +39,6 @@
     coverage report
 
 [testenv:version-info]
-basepython = python3.9
 deps =
     packaging == 21.3
 commands =
@@ -50,6 +48,6 @@
 python =
     3.7: py37, pytest-min
     3.8: py38
-    3.9: py39, lint
+    3.9: py39
     3.10: py310
     pypy3: pypy3

Reply via email to