File tree Expand file tree Collapse file tree 2 files changed +30
-1
lines changed
main/java/rx/subscriptions
test/java/rx/subscriptions Expand file tree Collapse file tree 2 files changed +30
-1
lines changed Original file line number Diff line number Diff line change 29
29
*/
30
30
public class SerialSubscription implements Subscription {
31
31
private final AtomicReference <Subscription > reference = new AtomicReference <Subscription >(empty ());
32
-
32
+ private volatile Subscription unsubscribe ;
33
+
33
34
private static final Subscription UNSUBSCRIBED = new Subscription () {
34
35
@ Override
35
36
public void unsubscribe () {
@@ -50,8 +51,16 @@ public void setSubscription(final Subscription subscription) {
50
51
}
51
52
if (reference .compareAndSet (current , subscription )) {
52
53
current .unsubscribe ();
54
+ if (subscription == UNSUBSCRIBED ) {
55
+ unsubscribe = current ;
56
+ }
53
57
break ;
54
58
}
55
59
} while (true );
56
60
}
61
+
62
+ public Subscription getSubscription () {
63
+ Subscription subscription = reference .get ();
64
+ return subscription == UNSUBSCRIBED ? unsubscribe : subscription ;
65
+ }
57
66
}
Original file line number Diff line number Diff line change 15
15
*/
16
16
package rx .subscriptions ;
17
17
18
+ import static org .junit .Assert .assertSame ;
18
19
import static org .junit .Assert .fail ;
19
20
import static org .mockito .Mockito .mock ;
20
21
import static org .mockito .Mockito .verify ;
@@ -46,6 +47,25 @@ public void unsubscribingWithoutUnderlyingDoesNothing() {
46
47
serialSubscription .unsubscribe ();
47
48
}
48
49
50
+ @ Test
51
+ public void getSubscriptionShouldReturnSubscriptionAfterUnsubscribe () {
52
+ final Subscription underlying = mock (Subscription .class );
53
+ serialSubscription .setSubscription (underlying );
54
+ serialSubscription .unsubscribe ();
55
+ assertSame (underlying , serialSubscription .getSubscription ());
56
+ }
57
+
58
+ @ Test
59
+ public void getSubscriptionShouldReturnSetSubscription () {
60
+ final Subscription underlying = mock (Subscription .class );
61
+ serialSubscription .setSubscription (underlying );
62
+ assertSame (underlying , serialSubscription .getSubscription ());
63
+
64
+ final Subscription another = mock (Subscription .class );
65
+ serialSubscription .setSubscription (another );
66
+ assertSame (another , serialSubscription .getSubscription ());
67
+ }
68
+
49
69
@ Test
50
70
public void unsubscribingTwiceDoesUnsubscribeOnce () {
51
71
Subscription underlying = mock (Subscription .class );
You can’t perform that action at this time.
0 commit comments