Skip to content

Commit 417fcbd

Browse files
committed
!squash
1 parent 4a97548 commit 417fcbd

File tree

2 files changed

+43
-31
lines changed

2 files changed

+43
-31
lines changed

src/libtmux/pytest_plugin.py

+20-12
Original file line numberDiff line numberDiff line change
@@ -262,37 +262,38 @@ def session(
262262
@pytest.fixture
263263
def TempServer(
264264
request: pytest.FixtureRequest,
265-
) -> t.Callable[[], t.Callable[..., Server]]:
265+
) -> Server:
266266
"""Create a temporary tmux server that cleans up after itself.
267267
268268
This is similar to the server pytest fixture, but can be used outside of pytest.
269269
The server will be killed when the test completes.
270270
271271
Returns
272272
-------
273-
Callable[[], Callable[..., Server]]
274-
A factory function that returns a partial'd Server with a unique socket_name
273+
Server
274+
A factory function that returns a Server with a unique socket_name
275275
276276
Examples
277277
--------
278-
>>> Server = request.getfixturevalue('TempServer')() # Get unique partial
279278
>>> server = Server() # Create server instance
280279
>>> server.new_session()
281280
Session($... ...)
282281
>>> server.is_alive()
283282
True
284-
>>> # Each call to TempServer() gets a new unique partial
285-
>>> Server2 = request.getfixturevalue('TempServer')()
286-
>>> server2 = Server2()
283+
>>> # Each call creates a new server with unique socket
284+
>>> server2 = Server()
287285
>>> server2.socket_name != server.socket_name
288286
True
289287
"""
290288
created_sockets: list[str] = []
291289

292-
def get_server() -> t.Callable[..., Server]:
293-
socket_name = f"libtmux_test{next(namer)}"
294-
created_sockets.append(socket_name)
295-
return functools.partial(Server, socket_name=socket_name)
290+
def on_init(server: Server) -> None:
291+
"""Track created servers for cleanup."""
292+
created_sockets.append(server.socket_name or "default")
293+
294+
def socket_name_factory() -> str:
295+
"""Generate unique socket names."""
296+
return f"libtmux_test{next(namer)}"
296297

297298
def fin() -> None:
298299
"""Kill all servers created with these sockets."""
@@ -303,4 +304,11 @@ def fin() -> None:
303304

304305
request.addfinalizer(fin)
305306

306-
return get_server
307+
return t.cast(
308+
"Server",
309+
functools.partial(
310+
Server,
311+
on_init=on_init,
312+
socket_name_factory=socket_name_factory,
313+
),
314+
)

tests/test_pytest_plugin.py

+23-19
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import pytest
1313

14+
from libtmux.server import Server
15+
1416

1517
def test_plugin(
1618
pytester: pytest.Pytester,
@@ -76,10 +78,9 @@ def test_repo_git_remote_checkout(
7678
result.assert_outcomes(passed=1)
7779

7880

79-
def test_temp_server(TempServer: t.Any) -> None:
81+
def test_temp_server(TempServer: t.Callable[..., Server]) -> None:
8082
"""Test TempServer creates and cleans up server."""
81-
Server = TempServer() # Get partial'd Server
82-
server = Server() # Create server instance
83+
server = TempServer()
8384
assert server.is_alive() is False # Server not started yet
8485

8586
session = server.new_session()
@@ -91,24 +92,31 @@ def test_temp_server(TempServer: t.Any) -> None:
9192
assert server.socket_name is not None
9293
assert server.socket_name.startswith("libtmux_test")
9394

95+
# Each call creates a new server with unique socket
96+
server2 = TempServer()
97+
assert server2.socket_name is not None
98+
assert server2.socket_name.startswith("libtmux_test")
99+
assert server2.socket_name != server.socket_name
100+
94101

95-
def test_temp_server_with_config(TempServer: t.Any, tmp_path: pathlib.Path) -> None:
96-
"""Test TempServer with custom config."""
102+
def test_temp_server_with_config(
103+
TempServer: t.Callable[..., Server],
104+
tmp_path: pathlib.Path,
105+
) -> None:
106+
"""Test TempServer with config file."""
97107
config_file = tmp_path / "tmux.conf"
98108
config_file.write_text("set -g status off", encoding="utf-8")
99109

100-
Server = TempServer() # Get partial'd Server
101-
server = Server(config_file=str(config_file)) # Create server with config
110+
server = TempServer(config_file=str(config_file))
102111
session = server.new_session()
103112

104-
# Verify config was loaded by checking status
113+
# Verify config was loaded
105114
assert session.cmd("show-options", "-g", "status").stdout[0] == "status off"
106115

107116

108-
def test_temp_server_cleanup(TempServer: t.Any) -> None:
117+
def test_temp_server_cleanup(TempServer: t.Callable[..., Server]) -> None:
109118
"""Test TempServer properly cleans up after itself."""
110-
Server = TempServer() # Get partial'd Server
111-
server = Server() # Create server instance
119+
server = TempServer()
112120
socket_name = server.socket_name
113121
assert socket_name is not None
114122

@@ -125,20 +133,16 @@ def test_temp_server_cleanup(TempServer: t.Any) -> None:
125133
time.sleep(0.1) # Give time for cleanup
126134

127135
# Create new server to verify old one was cleaned up
128-
Server2 = TempServer() # Get new partial'd Server
129-
new_server = Server2() # Create new server instance
136+
new_server = TempServer()
130137
assert new_server.is_alive() is False # Server not started yet
131138
new_server.new_session() # This should work if old server was cleaned up
132139
assert new_server.is_alive() is True
133140

134141

135-
def test_temp_server_multiple(TempServer: t.Any) -> None:
142+
def test_temp_server_multiple(TempServer: t.Callable[..., Server]) -> None:
136143
"""Test multiple TempServer instances can coexist."""
137-
Server1 = TempServer() # Get first partial'd Server
138-
Server2 = TempServer() # Get second partial'd Server
139-
140-
server1 = Server1() # Create first server instance
141-
server2 = Server2() # Create second server instance
144+
server1 = TempServer()
145+
server2 = TempServer()
142146

143147
# Each server should have a unique socket
144148
assert server1.socket_name != server2.socket_name

0 commit comments

Comments
 (0)