File tree Expand file tree Collapse file tree 2 files changed +24
-0
lines changed
language-adaptors/rxjava-scala/src Expand file tree Collapse file tree 2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -20,6 +20,15 @@ trait Subscriber[-T] extends Observer[T] with Subscription {
2020 asJavaSubscriber.add(s.asJavaSubscription)
2121 }
2222
23+ /**
24+ * Register a callback to be run when Subscriber is unsubscribed
25+ *
26+ * @param u callback to run when unsubscribed
27+ */
28+ final def add (u : => Unit ): Unit = {
29+ asJavaSubscriber.add(Subscription (u).asJavaSubscription)
30+ }
31+
2332 override final def unsubscribe (): Unit = {
2433 asJavaSubscriber.unsubscribe()
2534 }
Original file line number Diff line number Diff line change @@ -42,4 +42,19 @@ class SubscriberTests extends JUnitSuite {
4242 assertTrue(innerSubscriber.isUnsubscribed)
4343 }
4444
45+ @ Test def testBlockCallbackOnlyOnce () {
46+ var called = false
47+ val o = Observable [Int ](subscriber => {
48+ subscriber.add({ called = ! called })
49+ })
50+
51+ val subscription = o.subscribe()
52+ subscription.unsubscribe()
53+ subscription.unsubscribe()
54+
55+ // Even if called multiple times, callback is only called once
56+ assertTrue(called)
57+ assertTrue(subscription.isUnsubscribed)
58+ }
59+
4560}
You can’t perform that action at this time.
0 commit comments