2
from unittest import mock
6
from aiosignal import Signal
10
def __repr__(self) -> str:
11
return "<Owner 0xdeadbeef>"
20
async def test_add_signal_handler_not_a_callable(owner: Owner) -> None:
22
signal = Signal(owner)
23
signal.append(callback)
25
with pytest.raises(TypeError):
30
async def test_function_signal_dispatch_kwargs(owner: Owner) -> None:
31
signal = Signal(owner)
32
kwargs = {"foo": 1, "bar": 2}
34
callback_mock = mock.Mock()
36
async def callback(**kwargs):
37
callback_mock(**kwargs)
39
signal.append(callback)
42
await signal.send(**kwargs)
43
callback_mock.assert_called_once_with(**kwargs)
47
async def test_function_signal_dispatch_args_kwargs(owner: Owner) -> None:
48
signal = Signal(owner)
50
kwargs = {"foo": 1, "bar": 2}
52
callback_mock = mock.Mock()
54
async def callback(*args, **kwargs):
55
callback_mock(*args, **kwargs)
57
signal.append(callback)
60
await signal.send(*args, **kwargs)
61
callback_mock.assert_called_once_with(*args, **kwargs)
65
async def test_non_coroutine(owner: Owner) -> None:
66
signal = Signal(owner)
67
kwargs = {"foo": 1, "bar": 2}
69
callback = mock.Mock()
71
signal.append(callback)
74
with pytest.raises(TypeError):
75
await signal.send(**kwargs)
78
def test_setitem(owner: Owner) -> None:
79
signal = Signal(owner)
82
assert signal[0] is m1
85
assert signal[0] is m2
88
def test_delitem(owner: Owner) -> None:
89
signal = Signal(owner)
92
assert len(signal) == 1
94
assert len(signal) == 0
97
def test_cannot_append_to_frozen_signal(owner: Owner) -> None:
98
signal = Signal(owner)
103
with pytest.raises(RuntimeError):
106
assert list(signal) == [m1]
109
def test_cannot_setitem_in_frozen_signal(owner: Owner) -> None:
110
signal = Signal(owner)
115
with pytest.raises(RuntimeError):
118
assert list(signal) == [m1]
121
def test_cannot_delitem_in_frozen_signal(owner: Owner) -> None:
122
signal = Signal(owner)
126
with pytest.raises(RuntimeError):
129
assert list(signal) == [m1]
133
async def test_cannot_send_non_frozen_signal(owner: Owner) -> None:
134
signal = Signal(owner)
136
callback_mock = mock.Mock()
138
async def callback(**kwargs):
139
callback_mock(**kwargs)
141
signal.append(callback)
143
with pytest.raises(RuntimeError):
146
assert not callback_mock.called
149
def test_repr(owner: Owner) -> None:
150
signal = Signal(owner)
152
signal.append(mock.Mock(__repr__=lambda *a: "<callback>"))
156
r"<Signal owner=<Owner 0xdeadbeef>, frozen=False, " r"\[<callback>\]>",