77from __future__ import annotations
88
99import logging
10+ from dataclasses import dataclass
1011from typing import TYPE_CHECKING
1112
1213import pytest
1314
1415if TYPE_CHECKING :
1516 from libtmux .session import Session
1617
18+
19+ @dataclass (slots = True )
20+ class WindowInfo :
21+ """Minimal window details fetched concurrently during tests."""
22+
23+ id : str
24+ name : str
25+ panes : int
26+
27+
28+ @dataclass (slots = True )
29+ class ProjectSessionStatus :
30+ """Summary of session setup used for verification."""
31+
32+ session_id : str
33+ name : str
34+ window_count : int
35+
36+
1737logger = logging .getLogger (__name__ )
1838
1939
@@ -117,7 +137,7 @@ async def test_parallel_window_queries(session: Session) -> None:
117137 result = await session .acmd ("list-windows" , "-F#{window_id}" )
118138 window_ids = result .stdout
119139
120- async def get_window_info (window_id : str ) -> dict [ str , str ] :
140+ async def get_window_info (window_id : str ) -> WindowInfo :
121141 """Get window name and pane count."""
122142 result = await session .acmd (
123143 "display-message" ,
@@ -128,20 +148,18 @@ async def get_window_info(window_id: str) -> dict[str, str]:
128148 )
129149 output = result .stdout [0 ]
130150 parts = output .split (":" )
131- return {
132- "id" : parts [0 ],
133- "name" : parts [1 ],
134- "panes" : parts [2 ],
135- }
151+ return WindowInfo (id = parts [0 ], name = parts [1 ], panes = int (parts [2 ]))
136152
137153 # Query all windows concurrently
138- window_infos = await asyncio .gather (* [get_window_info (wid ) for wid in window_ids ])
154+ window_infos : list [WindowInfo ] = await asyncio .gather (
155+ * [get_window_info (wid ) for wid in window_ids ]
156+ )
139157
140158 # Verify all queries succeeded
141159 assert len (window_infos ) >= 3
142160 for info in window_infos :
143- assert info [ "id" ] .startswith ("@" )
144- assert int ( info [ " panes" ]) >= 1
161+ assert info . id .startswith ("@" )
162+ assert info . panes >= 1
145163
146164
147165# ============================================================================
@@ -167,12 +185,14 @@ async def test_anew_window_basic(session: Session) -> None:
167185
168186 # Verify window created with correct properties
169187 assert isinstance (window , Window )
170- assert window .window_id .startswith ("@" )
188+ window_id = window .window_id
189+ assert window_id is not None
190+ assert window_id .startswith ("@" )
171191
172192 # Verify window was added to session
173193 result = await session .acmd ("list-windows" , "-F#{window_id}" )
174194 assert len (result .stdout ) == initial_count + 1
175- assert window . window_id in result .stdout
195+ assert window_id in result .stdout
176196
177197
178198@pytest .mark .asyncio
@@ -245,13 +265,16 @@ async def create_window(name: str) -> Window:
245265 assert all (isinstance (w , Window ) for w in windows )
246266
247267 # Verify all have unique IDs
248- window_ids = {w .window_id for w in windows }
268+ window_ids : set [str ] = set ()
269+ for window in windows :
270+ assert window .window_id is not None
271+ window_ids .add (window .window_id )
249272 assert len (window_ids ) == 4
250273
251274 # Verify all exist in session
252275 result = await session .acmd ("list-windows" , "-F#{window_id}" )
253- for window in windows :
254- assert window . window_id in result .stdout
276+ for window_id in window_ids :
277+ assert window_id in result .stdout
255278
256279
257280# ============================================================================
@@ -268,6 +291,7 @@ async def test_arename_session(session: Session) -> None:
268291 """
269292 # Get original name
270293 original_name = session .session_name
294+ assert original_name is not None
271295
272296 # Rename session
273297 new_name = "renamed_async_session"
@@ -278,7 +302,9 @@ async def test_arename_session(session: Session) -> None:
278302
279303 # Verify session was renamed
280304 session .refresh ()
281- assert session .session_name == new_name
305+ current_name = session .session_name
306+ assert current_name is not None
307+ assert current_name == new_name
282308
283309 # Verify old name is gone, new name exists
284310 assert not session .server .has_session (original_name )
0 commit comments