From 179f830c4bc64065d3e8606ed5140257b4c82fae Mon Sep 17 00:00:00 2001 From: Sahas Subramanian Date: Tue, 9 Jan 2024 16:15:18 +0100 Subject: [PATCH] Test generic message type variance in `Sender`s and `Receiver`s --- tests/test_broadcast.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_broadcast.py b/tests/test_broadcast.py index 5319d4bf..2db1ffa7 100644 --- a/tests/test_broadcast.py +++ b/tests/test_broadcast.py @@ -5,6 +5,7 @@ import asyncio +from dataclasses import dataclass import pytest @@ -252,3 +253,27 @@ async def test_broadcast_receiver_drop() -> None: assert len(chan._receivers) == 1 # pylint: enable=protected-access + + +async def test_type_variance() -> None: + """Ensure that the type variance of Broadcast is working.""" + + @dataclass + class Broader: + """A broad class.""" + + value: int + + class Actual(Broader): + """Actual class.""" + + class Narrower(Actual): + """A narrower class.""" + + chan = Broadcast[Actual](name="input-chan") + + sender: Sender[Narrower] = chan.new_sender() + receiver: Receiver[Broader] = chan.new_receiver() + + await sender.send(Narrower(10)) + assert (await receiver.receive()).value == 10