11import asyncio
2+ import sys
23
34from typing import Any
45from unittest .mock import (
@@ -196,15 +197,22 @@ async def test_enqueue_event_when_closed(event_queue: EventQueue) -> None:
196197 await child_queue .dequeue_event (no_wait = True )
197198
198199
200+ @pytest .fixture
201+ def expected_queue_closed_exception ():
202+ if sys .version_info < (3 , 13 ):
203+ return asyncio .QueueEmpty
204+ return asyncio .QueueShutDown
205+
206+
199207@pytest .mark .asyncio
200208async def test_dequeue_event_closed_and_empty_no_wait (
201- event_queue : EventQueue ,
209+ event_queue : EventQueue , expected_queue_closed_exception
202210) -> None :
203211 """Test dequeue_event raises QueueEmpty when closed, empty, and no_wait=True."""
204212 await event_queue .close ()
205213 assert event_queue .is_closed ()
206214 # Ensure queue is actually empty (e.g. by trying a non-blocking get on internal queue)
207- with pytest .raises (asyncio . QueueEmpty ):
215+ with pytest .raises (expected_queue_closed_exception ):
208216 event_queue .queue .get_nowait ()
209217
210218 with pytest .raises (asyncio .QueueEmpty , match = 'Queue is closed.' ):
@@ -213,14 +221,12 @@ async def test_dequeue_event_closed_and_empty_no_wait(
213221
214222@pytest .mark .asyncio
215223async def test_dequeue_event_closed_and_empty_waits_then_raises (
216- event_queue : EventQueue ,
224+ event_queue : EventQueue , expected_queue_closed_exception
217225) -> None :
218226 """Test dequeue_event raises QueueEmpty eventually when closed, empty, and no_wait=False."""
219227 await event_queue .close ()
220228 assert event_queue .is_closed ()
221- with pytest .raises (
222- asyncio .QueueEmpty
223- ): # Should still raise QueueEmpty as per current implementation
229+ with pytest .raises (expected_queue_closed_exception ):
224230 event_queue .queue .get_nowait () # verify internal queue is empty
225231
226232 # This test is tricky because await event_queue.dequeue_event() would hang if not for the close check.
0 commit comments