Skip to content

Commit d09964c

Browse files
UnitTests demonstrating bugs
1 parent b663a1d commit d09964c

File tree

2 files changed

+91
-4
lines changed

2 files changed

+91
-4
lines changed

rxjava-core/src/test/java/rx/subjects/BehaviorSubjectTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
import static org.mockito.Mockito.*;
2020

2121
import org.junit.Test;
22+
import org.mockito.InOrder;
2223
import org.mockito.Mockito;
2324

2425
import rx.Observer;
26+
import rx.Subscription;
2527
import rx.util.functions.Action1;
2628
import rx.util.functions.Func0;
2729

@@ -91,6 +93,50 @@ public void testCompleted() {
9193

9294
assertCompletedObserver(aObserver);
9395
}
96+
97+
@Test
98+
public void testCompletedStopsEmittingData() {
99+
BehaviorSubject<Integer> channel = BehaviorSubject.createWithDefaultValue(2013);
100+
@SuppressWarnings("unchecked")
101+
Observer<Object> observerA = mock(Observer.class);
102+
@SuppressWarnings("unchecked")
103+
Observer<Object> observerB = mock(Observer.class);
104+
@SuppressWarnings("unchecked")
105+
Observer<Object> observerC = mock(Observer.class);
106+
107+
InOrder inOrder = inOrder(observerA, observerB, observerC);
108+
109+
Subscription a = channel.subscribe(observerA);
110+
Subscription b = channel.subscribe(observerB);
111+
112+
inOrder.verify(observerA).onNext(2013);
113+
inOrder.verify(observerB).onNext(2013);
114+
115+
channel.onNext(42);
116+
117+
inOrder.verify(observerA).onNext(42);
118+
inOrder.verify(observerB).onNext(42);
119+
120+
a.unsubscribe();
121+
122+
channel.onNext(4711);
123+
124+
inOrder.verify(observerA, never()).onNext(any());
125+
inOrder.verify(observerB).onNext(4711);
126+
127+
channel.onCompleted();
128+
129+
inOrder.verify(observerA, never()).onCompleted();
130+
inOrder.verify(observerB).onCompleted();
131+
132+
Subscription c = channel.subscribe(observerC);
133+
134+
inOrder.verify(observerC).onCompleted();
135+
136+
channel.onNext(13);
137+
138+
inOrder.verifyNoMoreInteractions();
139+
}
94140

95141
private void assertCompletedObserver(Observer<String> aObserver) {
96142
verify(aObserver, times(1)).onNext("default");

rxjava-core/src/test/java/rx/subjects/PublishSubjectTest.java

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/**
22
* Copyright 2013 Netflix, Inc.
3-
*
3+
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
66
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
1010
* Unless required by applicable law or agreed to in writing, software
1111
* distributed under the License is distributed on an "AS IS" BASIS,
1212
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -117,6 +117,47 @@ public void testCompleted() {
117117
// todo bug? assertNeverObserver(anotherObserver);
118118
}
119119

120+
@Test
121+
public void testCompletedStopsEmittingData() {
122+
PublishSubject<Object> channel = PublishSubject.create();
123+
@SuppressWarnings("unchecked")
124+
Observer<Object> observerA = mock(Observer.class);
125+
@SuppressWarnings("unchecked")
126+
Observer<Object> observerB = mock(Observer.class);
127+
@SuppressWarnings("unchecked")
128+
Observer<Object> observerC = mock(Observer.class);
129+
130+
InOrder inOrder = inOrder(observerA, observerB, observerC);
131+
132+
Subscription a = channel.subscribe(observerA);
133+
Subscription b = channel.subscribe(observerB);
134+
135+
channel.onNext(42);
136+
137+
inOrder.verify(observerA).onNext(42);
138+
inOrder.verify(observerB).onNext(42);
139+
140+
a.unsubscribe();
141+
142+
channel.onNext(4711);
143+
144+
inOrder.verify(observerA, never()).onNext(any());
145+
inOrder.verify(observerB).onNext(4711);
146+
147+
channel.onCompleted();
148+
149+
inOrder.verify(observerA, never()).onCompleted();
150+
inOrder.verify(observerB).onCompleted();
151+
152+
Subscription c = channel.subscribe(observerC);
153+
154+
inOrder.verify(observerC).onCompleted();
155+
156+
channel.onNext(13);
157+
158+
inOrder.verifyNoMoreInteractions();
159+
}
160+
120161
private void assertCompletedObserver(Observer<String> aObserver) {
121162
verify(aObserver, times(1)).onNext("one");
122163
verify(aObserver, times(1)).onNext("two");

0 commit comments

Comments
 (0)