@@ -100,6 +100,34 @@ def check_val(res, idx):
100
100
self .assertEqual (str (results [0 ].value ), "gah!" , "observer 1 errback result" )
101
101
self .assertEqual (str (results [1 ].value ), "gah!" , "observer 2 errback result" )
102
102
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
+
103
131
104
132
class TimeoutDeferredTest (TestCase ):
105
133
def setUp (self ):
0 commit comments