|
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +import os |
1 | 4 | import logging |
2 | 5 | import inspect |
3 | | -from typing import Any, Iterator, Iterable |
| 6 | +from typing import Iterator, List |
4 | 7 |
|
5 | 8 | from loguru import logger |
6 | 9 | import pytest |
|
17 | 20 | from idom.testing import ServerMountPoint, create_simple_selenium_web_driver |
18 | 21 |
|
19 | 22 |
|
20 | | -def pytest_collection_modifyitems(items: Iterable[Any]) -> None: |
21 | | - for item in items: |
22 | | - if isinstance(item, pytest.Function): |
23 | | - if inspect.iscoroutinefunction(item.function): |
24 | | - item.add_marker(pytest.mark.asyncio) |
| 23 | +def pytest_collection_modifyitems( |
| 24 | + session: pytest.Session, config: pytest.config.Config, items: List[pytest.Item] |
| 25 | +) -> None: |
| 26 | + _mark_coros_as_async_tests(items) |
| 27 | + _xfail_driver_tests_on_windows(items) |
25 | 28 |
|
26 | 29 |
|
27 | 30 | def pytest_addoption(parser: Parser) -> None: |
@@ -135,3 +138,24 @@ def _restore_client(pytestconfig: Config) -> Iterator[None]: |
135 | 138 | manage_client.restore() |
136 | 139 | else: |
137 | 140 | yield |
| 141 | + |
| 142 | + |
| 143 | +def _mark_coros_as_async_tests(items: List[pytest.Item]) -> None: |
| 144 | + for item in items: |
| 145 | + if isinstance(item, pytest.Function): |
| 146 | + if inspect.iscoroutinefunction(item.function): |
| 147 | + item.add_marker(pytest.mark.asyncio) |
| 148 | + |
| 149 | + |
| 150 | +def _xfail_driver_tests_on_windows(items: List[pytest.Item]) -> None: |
| 151 | + if os.name == "nt": |
| 152 | + for item in items: |
| 153 | + if isinstance(item, pytest.Function): |
| 154 | + if {"display", "driver", "create_driver"}.intersection( |
| 155 | + item.fixturenames |
| 156 | + ): |
| 157 | + item.add_marker( |
| 158 | + pytest.mark.xfail( |
| 159 | + reason="WebDriver tests are not working on Windows", |
| 160 | + ) |
| 161 | + ) |
0 commit comments