File: test_utils_asyncio.py

package info (click to toggle)
python-scrapy 2.13.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,664 kB
  • sloc: python: 52,028; xml: 199; makefile: 25; sh: 7
file content (35 lines) | stat: -rw-r--r-- 1,212 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import asyncio
import warnings

import pytest
from twisted.trial.unittest import TestCase

from scrapy.utils.defer import deferred_f_from_coro_f
from scrapy.utils.reactor import (
    install_reactor,
    is_asyncio_reactor_installed,
    set_asyncio_event_loop,
)


@pytest.mark.usefixtures("reactor_pytest")
class TestAsyncio(TestCase):
    def test_is_asyncio_reactor_installed(self):
        # the result should depend only on the pytest --reactor argument
        assert is_asyncio_reactor_installed() == (self.reactor_pytest != "default")

    def test_install_asyncio_reactor(self):
        from twisted.internet import reactor as original_reactor

        with warnings.catch_warnings(record=True) as w:
            install_reactor("twisted.internet.asyncioreactor.AsyncioSelectorReactor")
            assert len(w) == 0
        from twisted.internet import reactor  # pylint: disable=reimported

        assert original_reactor == reactor

    @pytest.mark.only_asyncio
    @deferred_f_from_coro_f
    async def test_set_asyncio_event_loop(self):
        install_reactor("twisted.internet.asyncioreactor.AsyncioSelectorReactor")
        assert set_asyncio_event_loop(None) is asyncio.get_running_loop()