Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit b1676c0

Browse files
author
Sean Quah
committedMar 3, 2022
Add test for ObservableDeferred's cancellation behaviour
Signed-off-by: Sean Quah <seanq@element.io>
1 parent a511a89 commit b1676c0

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed
 

‎changelog.d/12149.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add test for `ObservableDeferred`'s cancellation behaviour.

‎tests/util/test_async_helpers.py

+28
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,34 @@ def check_val(res, idx):
100100
self.assertEqual(str(results[0].value), "gah!", "observer 1 errback result")
101101
self.assertEqual(str(results[1].value), "gah!", "observer 2 errback result")
102102

103+
def test_cancellation(self):
104+
"""Test that cancelling an observer does not affect other observers."""
105+
origin_d: "Deferred[int]" = Deferred()
106+
observable = ObservableDeferred(origin_d, consumeErrors=True)
107+
108+
observer1 = observable.observe()
109+
observer2 = observable.observe()
110+
observer3 = observable.observe()
111+
112+
self.assertFalse(observer1.called)
113+
self.assertFalse(observer2.called)
114+
self.assertFalse(observer3.called)
115+
116+
# cancel the second observer
117+
observer2.cancel()
118+
self.assertFalse(observer1.called)
119+
self.failureResultOf(observer2, CancelledError)
120+
self.assertFalse(observer3.called)
121+
122+
# other observers resolve as normal
123+
origin_d.callback(123)
124+
self.assertEqual(observer1.result, 123, "observer 1 callback result")
125+
self.assertEqual(observer3.result, 123, "observer 3 callback result")
126+
127+
# additional observers resolve as normal
128+
observer4 = observable.observe()
129+
self.assertEqual(observer4.result, 123, "observer 4 callback result")
130+
103131

104132
class TimeoutDeferredTest(TestCase):
105133
def setUp(self):

0 commit comments

Comments
 (0)