@@ -395,6 +395,58 @@ async def test_get_iter_fails_after_close(self):
395395 async for _ in self .assembler .get_iter ():
396396 self .fail ("no fragment expected" )
397397
398+ async def test_get_queued_message_after_close (self ):
399+ """get returns a message after close is called."""
400+ self .assembler .put (Frame (OP_TEXT , b"caf\xc3 \xa9 " ))
401+ self .assembler .close ()
402+ message = await self .assembler .get ()
403+ self .assertEqual (message , "café" )
404+
405+ async def test_get_iter_queued_message_after_close (self ):
406+ """get_iter yields a message after close is called."""
407+ self .assembler .put (Frame (OP_TEXT , b"caf\xc3 \xa9 " ))
408+ self .assembler .close ()
409+ fragments = await alist (self .assembler .get_iter ())
410+ self .assertEqual (fragments , ["café" ])
411+
412+ async def test_get_queued_fragmented_message_after_close (self ):
413+ """get reassembles a fragmented message after close is called."""
414+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
415+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
416+ self .assembler .put (Frame (OP_CONT , b"a" ))
417+ self .assembler .close ()
418+ self .assembler .close ()
419+ message = await self .assembler .get ()
420+ self .assertEqual (message , b"tea" )
421+
422+ async def test_get_iter_queued_fragmented_message_after_close (self ):
423+ """get_iter yields a fragmented message after close is called."""
424+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
425+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
426+ self .assembler .put (Frame (OP_CONT , b"a" ))
427+ self .assembler .close ()
428+ fragments = await alist (self .assembler .get_iter ())
429+ self .assertEqual (fragments , [b"t" , b"e" , b"a" ])
430+
431+ async def test_get_partially_queued_fragmented_message_after_close (self ):
432+ """get raises EOF on a partial fragmented message after close is called."""
433+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
434+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
435+ self .assembler .close ()
436+ with self .assertRaises (EOFError ):
437+ await self .assembler .get ()
438+
439+ async def test_get_iter_partially_queued_fragmented_message_after_close (self ):
440+ """get_iter yields a partial fragmented message after close is called."""
441+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
442+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
443+ self .assembler .close ()
444+ fragments = []
445+ with self .assertRaises (EOFError ):
446+ async for fragment in self .assembler .get_iter ():
447+ fragments .append (fragment )
448+ self .assertEqual (fragments , [b"t" , b"e" ])
449+
398450 async def test_put_fails_after_close (self ):
399451 """put raises EOFError after close is called."""
400452 self .assembler .close ()
0 commit comments