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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
import pytest
from libqtile.backend.base import drawer
from test.helpers import BareConfig, TestManager
def pytest_addoption(parser):
parser.addoption("--debuglog", action="store_true", default=False, help="enable debug output")
parser.addoption(
"--backend",
action="append",
choices=("x11", "wayland"),
help="Test a specific backend. Can be passed more than once.",
)
def pytest_cmdline_main(config):
if not config.option.backend:
config.option.backend = ["x11"]
ignore = config.option.ignore or []
if "wayland" not in config.option.backend:
ignore.append("test/backend/wayland")
if "x11" not in config.option.backend:
ignore.append("test/backend/x11")
config.option.ignore = ignore
def pytest_generate_tests(metafunc):
if "backend" in metafunc.fixturenames:
backends = metafunc.config.option.backend
metafunc.parametrize("backend_name", backends)
@pytest.fixture(scope="session", params=[1])
def outputs(request):
return request.param
dualmonitor = pytest.mark.parametrize("outputs", [2], indirect=True)
multimonitor = pytest.mark.parametrize("outputs", [1, 2], indirect=True)
@pytest.fixture(scope="session")
def xephyr(request, outputs):
if "x11" not in request.config.option.backend:
yield
return
from test.backend.x11.conftest import x11_environment
kwargs = getattr(request, "param", {})
with x11_environment(outputs, **kwargs) as x:
yield x
@pytest.fixture(scope="session")
def wayland_session(request, outputs):
if "wayland" not in request.config.option.backend:
yield
return
from test.backend.wayland.conftest import wayland_environment
with wayland_environment(outputs) as w:
yield w
@pytest.fixture(scope="function")
def backend(request, backend_name, xephyr, wayland_session):
if backend_name == "x11":
from test.backend.x11.conftest import XBackend
yield XBackend({"DISPLAY": xephyr.display}, args=[xephyr.display])
elif backend_name == "wayland":
from test.backend.wayland.conftest import WaylandBackend
yield WaylandBackend(wayland_session)
@pytest.fixture(scope="function")
def manager_nospawn(request, backend):
with TestManager(backend, request.config.getoption("--debuglog")) as manager:
yield manager
@pytest.fixture(scope="function")
def manager(request, manager_nospawn):
config = getattr(request, "param", BareConfig)
manager_nospawn.start(config)
yield manager_nospawn
@pytest.fixture(scope="function")
def manager_withlogs(request, manager_nospawn):
config = getattr(request, "param", BareConfig)
manager_nospawn.start(config, want_logs=True)
yield manager_nospawn
@pytest.fixture(scope="function")
def fake_window():
"""
A fake window that can provide a fake drawer to test widgets.
"""
class FakeWindow:
class _NestedWindow:
wid = 10
window = _NestedWindow()
def create_drawer(self, width, height):
return drawer.Drawer(None, self, width, height)
return FakeWindow()
@pytest.fixture
def anyio_backend():
return "asyncio"
|