|
18 | 18 | import static org.junit.Assert.assertTrue;
|
19 | 19 | import static org.mockito.Matchers.any;
|
20 | 20 | import static org.mockito.Matchers.anyString;
|
21 |
| -import static org.mockito.Mockito.inOrder; |
22 |
| -import static org.mockito.Mockito.mock; |
23 |
| -import static org.mockito.Mockito.never; |
24 |
| -import static org.mockito.Mockito.times; |
25 |
| -import static org.mockito.Mockito.verify; |
| 21 | +import static org.mockito.Mockito.*; |
26 | 22 |
|
27 | 23 | import java.util.Arrays;
|
28 | 24 | import java.util.concurrent.TimeUnit;
|
29 | 25 | import java.util.concurrent.atomic.AtomicBoolean;
|
30 | 26 |
|
| 27 | +import org.junit.Assert; |
31 | 28 | import org.junit.Before;
|
32 | 29 | import org.junit.Test;
|
33 | 30 | import org.mockito.InOrder;
|
34 | 31 |
|
35 |
| -import rx.*; |
| 32 | +import rx.Observable; |
| 33 | +import rx.Observer; |
| 34 | +import rx.Producer; |
| 35 | +import rx.Scheduler; |
| 36 | +import rx.Subscriber; |
36 | 37 | import rx.exceptions.TestException;
|
37 | 38 | import rx.functions.Action0;
|
| 39 | +import rx.functions.Func1; |
38 | 40 | import rx.observers.TestSubscriber;
|
39 | 41 | import rx.schedulers.TestScheduler;
|
40 | 42 |
|
@@ -530,4 +532,46 @@ public void call(final Subscriber<? super Observable<Integer>> subscriber) {
|
530 | 532 | ).take(1).subscribe();
|
531 | 533 | assertTrue("Switch doesn't propagate 'unsubscribe'", isUnsubscribed.get());
|
532 | 534 | }
|
| 535 | + /** The upstream producer hijacked the switch producer stopping the requests aimed at the inner observables. */ |
| 536 | + @Test |
| 537 | + public void testIssue2654() { |
| 538 | + Observable<String> oneItem = Observable.just("Hello").mergeWith(Observable.<String>never()); |
| 539 | + |
| 540 | + Observable<String> src = oneItem.switchMap(new Func1<String, Observable<String>>() { |
| 541 | + @Override |
| 542 | + public Observable<String> call(final String s) { |
| 543 | + return Observable.just(s) |
| 544 | + .mergeWith(Observable.interval(10, TimeUnit.MILLISECONDS) |
| 545 | + .map(new Func1<Long, String>() { |
| 546 | + @Override |
| 547 | + public String call(Long i) { |
| 548 | + return s + " " + i; |
| 549 | + } |
| 550 | + })).take(250); |
| 551 | + } |
| 552 | + }) |
| 553 | + .share() |
| 554 | + ; |
| 555 | + |
| 556 | + TestSubscriber<String> ts = new TestSubscriber<String>() { |
| 557 | + @Override |
| 558 | + public void onNext(String t) { |
| 559 | + super.onNext(t); |
| 560 | + if (getOnNextEvents().size() == 250) { |
| 561 | + onCompleted(); |
| 562 | + unsubscribe(); |
| 563 | + } |
| 564 | + } |
| 565 | + }; |
| 566 | + src.subscribe(ts); |
| 567 | + |
| 568 | + ts.awaitTerminalEvent(10, TimeUnit.SECONDS); |
| 569 | + |
| 570 | + System.out.println("> testIssue2654: " + ts.getOnNextEvents().size()); |
| 571 | + |
| 572 | + ts.assertTerminalEvent(); |
| 573 | + ts.assertNoErrors(); |
| 574 | + |
| 575 | + Assert.assertEquals(250, ts.getOnNextEvents().size()); |
| 576 | + } |
533 | 577 | }
|
0 commit comments