Skip to content

Commit c711c8d

Browse files
committed
!squash more
1 parent 063156d commit c711c8d

File tree

2 files changed

+44
-52
lines changed

2 files changed

+44
-52
lines changed

src/libtmux/pytest_plugin.py

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -260,43 +260,47 @@ def session(
260260

261261

262262
@pytest.fixture
263-
def TempServer(request: pytest.FixtureRequest) -> Server:
263+
def TempServer(
264+
request: pytest.FixtureRequest,
265+
) -> t.Callable[[], t.Callable[..., Server]]:
264266
"""Create a temporary tmux server that cleans up after itself.
265267
266268
This is similar to the server pytest fixture, but can be used outside of pytest.
267-
The server will be killed when the object is garbage collected.
268-
269-
Parameters
270-
----------
271-
socket_name : str, optional
272-
Name for the tmux socket. If not provided, a random one will be generated.
273-
**kwargs : dict
274-
Additional arguments to pass to Server constructor
269+
The server will be killed when the test completes.
275270
276271
Returns
277272
-------
278-
Server
279-
A Server instance that will clean up after itself
273+
Callable[[], Callable[..., Server]]
274+
A factory function that returns a partial'd Server with a unique socket_name
280275
281276
Examples
282277
--------
283-
>>> server = TempServer()
278+
>>> Server = request.getfixturevalue('TempServer')() # Get unique partial
279+
>>> server = Server() # Create server instance
284280
>>> server.new_session()
285281
Session($... ...)
286282
>>> server.is_alive()
287283
True
288-
>>> del server # Server is automatically killed
284+
>>> # Each call to TempServer() gets a new unique partial
285+
>>> Server2 = request.getfixturevalue('TempServer')()
286+
>>> server2 = Server2()
287+
>>> server2.socket_name != server.socket_name
288+
True
289289
"""
290-
socket_name = f"libtmux_test{next(namer)}"
290+
created_sockets: list[str] = []
291291

292-
Server_ = functools.partial(Server, socket_name=socket_name)
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)
293296

294297
def fin() -> None:
295-
"""Kill server if it exists."""
296-
server = Server(socket_name=socket_name)
297-
if server.is_alive():
298-
server.kill()
298+
"""Kill all servers created with these sockets."""
299+
for socket_name in created_sockets:
300+
server = Server(socket_name=socket_name)
301+
if server.is_alive():
302+
server.kill()
299303

300304
request.addfinalizer(fin)
301305

302-
return Server_
306+
return get_server

tests/test_pytest_plugin.py

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -75,48 +75,39 @@ def test_repo_git_remote_checkout(
7575
result.assert_outcomes(passed=1)
7676

7777

78-
def test_temp_server() -> None:
78+
def test_temp_server(TempServer: t.Any) -> None:
7979
"""Test TempServer creates and cleans up server."""
80-
from libtmux.pytest_plugin import TempServer
81-
82-
server = TempServer()
80+
Server = TempServer() # Get partial'd Server
81+
server = Server() # Create server instance
8382
assert server.is_alive() is False # Server not started yet
8483

8584
session = server.new_session()
8685
assert server.is_alive() is True
8786
assert len(server.sessions) == 1
8887
assert session.session_name is not None
8988

90-
# Test custom socket name
91-
custom_server = TempServer(socket_name="test_custom")
92-
assert custom_server.socket_name == "test_custom"
93-
94-
# Test cleanup
95-
del server
96-
del custom_server
89+
# Test socket name is unique
90+
assert server.socket_name is not None
91+
assert server.socket_name.startswith("libtmux_test")
9792

9893

99-
def test_temp_server_with_config(tmp_path: pathlib.Path) -> None:
94+
def test_temp_server_with_config(TempServer: t.Any, tmp_path: pathlib.Path) -> None:
10095
"""Test TempServer with custom config."""
101-
from libtmux.pytest_plugin import TempServer
102-
10396
config_file = tmp_path / "tmux.conf"
10497
config_file.write_text("set -g status off", encoding="utf-8")
10598

106-
server = TempServer(config_file=str(config_file))
99+
Server = TempServer() # Get partial'd Server
100+
server = Server(config_file=str(config_file)) # Create server with config
107101
session = server.new_session()
108102

109103
# Verify config was loaded by checking status
110104
assert session.cmd("show-options", "-g", "status").stdout[0] == "status off"
111105

112-
del server
113106

114-
115-
def test_temp_server_cleanup() -> None:
107+
def test_temp_server_cleanup(TempServer: t.Any) -> None:
116108
"""Test TempServer properly cleans up after itself."""
117-
from libtmux.pytest_plugin import TempServer
118-
119-
server = TempServer()
109+
Server = TempServer() # Get partial'd Server
110+
server = Server() # Create server instance
120111
socket_name = server.socket_name
121112
assert socket_name is not None
122113

@@ -130,23 +121,23 @@ def test_temp_server_cleanup() -> None:
130121

131122
# Delete server and verify cleanup
132123
server.kill()
133-
del server
134124
time.sleep(0.1) # Give time for cleanup
135125

136-
# Create new server with same socket name to verify old one was cleaned up
137-
new_server = TempServer(socket_name=socket_name)
126+
# Create new server to verify old one was cleaned up
127+
Server2 = TempServer() # Get new partial'd Server
128+
new_server = Server2() # Create new server instance
138129
assert new_server.is_alive() is False # Server not started yet
139130
new_server.new_session() # This should work if old server was cleaned up
140131
assert new_server.is_alive() is True
141-
del new_server
142132

143133

144-
def test_temp_server_multiple() -> None:
134+
def test_temp_server_multiple(TempServer: t.Any) -> None:
145135
"""Test multiple TempServer instances can coexist."""
146-
from libtmux.pytest_plugin import TempServer
136+
Server1 = TempServer() # Get first partial'd Server
137+
Server2 = TempServer() # Get second partial'd Server
147138

148-
server1 = TempServer()
149-
server2 = TempServer()
139+
server1 = Server1() # Create first server instance
140+
server2 = Server2() # Create second server instance
150141

151142
# Each server should have a unique socket
152143
assert server1.socket_name != server2.socket_name
@@ -160,6 +151,3 @@ def test_temp_server_multiple() -> None:
160151
assert any(s.session_name == "test2" for s in server2.sessions)
161152
assert not any(s.session_name == "test1" for s in server2.sessions)
162153
assert not any(s.session_name == "test2" for s in server1.sessions)
163-
164-
del server1
165-
del server2

0 commit comments

Comments
 (0)