1212import pytest
1313
1414from libtmux import exc
15+ from libtmux ._internal .engines .base import Engine
16+ from libtmux ._internal .engines .control_mode import ControlModeEngine
17+ from libtmux ._internal .engines .subprocess_engine import SubprocessEngine
1518from libtmux .server import Server
1619from libtmux .test .constants import TEST_SESSION_PREFIX
1720from libtmux .test .random import get_test_session_name , namer
@@ -115,6 +118,7 @@ def server(
115118 request : pytest .FixtureRequest ,
116119 monkeypatch : pytest .MonkeyPatch ,
117120 config_file : pathlib .Path ,
121+ engine_name : str ,
118122) -> Server :
119123 """Return new, temporary :class:`libtmux.Server`.
120124
@@ -141,7 +145,10 @@ def server(
141145
142146 >>> result.assert_outcomes(passed=1)
143147 """
144- server = Server (socket_name = f"libtmux_test{ next (namer )} " )
148+ server = Server (
149+ socket_name = f"libtmux_test{ next (namer )} " ,
150+ engine = _build_engine (engine_name ),
151+ )
145152
146153 def fin () -> None :
147154 server .kill ()
@@ -311,5 +318,26 @@ def fin() -> None:
311318 Server ,
312319 on_init = on_init ,
313320 socket_name_factory = socket_name_factory ,
321+ engine = _build_engine (request .getfixturevalue ("engine_name" )),
314322 ),
315323 )
324+
325+
326+ @pytest .fixture
327+ def engine_name (request : pytest .FixtureRequest ) -> str :
328+ """Engine selector fixture, driven by CLI or parametrization."""
329+ if hasattr (request , "param" ):
330+ return t .cast (str , request .param )
331+ try :
332+ return t .cast (str , request .config .getoption ("--engine" ))
333+ except ValueError :
334+ # Option may not be registered when libtmux is used purely as a plugin
335+ # dependency in downstream projects. Default to subprocess for safety.
336+ return "subprocess"
337+
338+
339+ def _build_engine (engine_name : str ) -> Engine :
340+ """Return engine instance by name."""
341+ if engine_name == "control" :
342+ return ControlModeEngine ()
343+ return SubprocessEngine ()
0 commit comments