MCPcopy
hub / github.com/django/django / test_garbage_collected_sender

Method test_garbage_collected_sender

tests/dispatch/tests.py:97–130  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

95 self.assertTestIsClean(a_signal)
96
97 def test_garbage_collected_sender(self):
98 signal = Signal()
99
100 class Sender:
101 pass
102
103 def make_id(target):
104 """
105 Simulate id() reuse for distinct senders with non-overlapping
106 lifetimes that would require memory contention to reproduce.
107 """
108 if isinstance(target, Sender):
109 return 0
110 return _make_id(target)
111
112 def first_receiver(attempt, **kwargs):
113 return attempt
114
115 def second_receiver(attempt, **kwargs):
116 return attempt
117
118 with mock.patch("django.dispatch.dispatcher._make_id", make_id):
119 sender = Sender()
120 signal.connect(first_receiver, sender)
121 result = signal.send(sender, attempt="first")
122 self.assertEqual(result, [(first_receiver, "first")])
123
124 del sender
125 garbage_collect()
126
127 sender = Sender()
128 signal.connect(second_receiver, sender)
129 result = signal.send(sender, attempt="second")
130 self.assertEqual(result, [(second_receiver, "second")])
131
132 def test_cached_garbaged_collected(self):
133 """

Callers

nothing calls this directly

Calls 6

connectMethod · 0.95
sendMethod · 0.95
SignalClass · 0.90
garbage_collectFunction · 0.90
SenderClass · 0.85
patchMethod · 0.45

Tested by

no test coverage detected