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