Skip to content

Commit 6c1a1ab

Browse files
committed
take(0) subscribes to its source
1 parent 550005c commit 6c1a1ab

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

rxjava-core/src/main/java/rx/operators/OperationTake.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import rx.util.AtomicObservableSubscription;
2424
import rx.util.functions.Func1;
2525

26+
import java.util.concurrent.atomic.AtomicBoolean;
2627
import java.util.concurrent.atomic.AtomicInteger;
2728

29+
import static org.junit.Assert.assertTrue;
2830
import static org.junit.Assert.fail;
2931
import static org.mockito.Matchers.any;
3032
import static org.mockito.Mockito.mock;
@@ -82,6 +84,23 @@ private Take(Observable<T> items, int num) {
8284
@Override
8385
public Subscription call(Observer<T> observer) {
8486
if (num < 1) {
87+
items.subscribe(new Observer<T>()
88+
{
89+
@Override
90+
public void onCompleted()
91+
{
92+
}
93+
94+
@Override
95+
public void onError(Exception e)
96+
{
97+
}
98+
99+
@Override
100+
public void onNext(T args)
101+
{
102+
}
103+
}).unsubscribe();
85104
observer.onCompleted();
86105
return Subscriptions.empty();
87106
}
@@ -178,8 +197,28 @@ public Subscription call(Observer<String> observer)
178197

179198
@Test
180199
public void testTakeZeroDoesntLeakError() {
181-
Observable<String> source = Observable.error(new Exception("test failed"));
200+
final AtomicBoolean subscribed = new AtomicBoolean(false);
201+
final AtomicBoolean unSubscribed = new AtomicBoolean(false);
202+
Observable<String> source = Observable.create(new Func1<Observer<String>, Subscription>()
203+
{
204+
@Override
205+
public Subscription call(Observer<String> observer)
206+
{
207+
subscribed.set(true);
208+
observer.onError(new Exception("test failed"));
209+
return new Subscription()
210+
{
211+
@Override
212+
public void unsubscribe()
213+
{
214+
unSubscribed.set(true);
215+
}
216+
};
217+
}
218+
});
182219
Observable.create(assertTrustedObservable(take(source, 0))).lastOrDefault("ok");
220+
assertTrue("source subscribed", subscribed.get());
221+
assertTrue("source unsubscribed", unSubscribed.get());
183222
}
184223

185224
@Test

0 commit comments

Comments
 (0)