|
15 | 15 | */
|
16 | 16 | package rx.operators;
|
17 | 17 |
|
18 |
| -import static org.junit.Assert.*; |
19 |
| -import static org.mockito.Matchers.*; |
20 |
| -import static org.mockito.Mockito.*; |
| 18 | +import static org.junit.Assert.assertEquals; |
| 19 | +import static org.junit.Assert.assertFalse; |
| 20 | +import static org.junit.Assert.assertTrue; |
| 21 | +import static org.junit.Assert.fail; |
| 22 | +import static org.mockito.Matchers.any; |
| 23 | +import static org.mockito.Mockito.never; |
| 24 | +import static org.mockito.Mockito.times; |
| 25 | +import static org.mockito.Mockito.verify; |
21 | 26 |
|
22 | 27 | import java.util.ArrayList;
|
23 | 28 | import java.util.Arrays;
|
|
37 | 42 | import rx.Observable.OnSubscribe;
|
38 | 43 | import rx.Observer;
|
39 | 44 | import rx.Scheduler;
|
| 45 | +import rx.Scheduler.Inner; |
40 | 46 | import rx.Subscriber;
|
41 | 47 | import rx.Subscription;
|
42 | 48 | import rx.functions.Action0;
|
@@ -472,4 +478,112 @@ public void call() {
|
472 | 478 | });
|
473 | 479 | }
|
474 | 480 |
|
| 481 | + @Test |
| 482 | + public void testConcurrency() { |
| 483 | + |
| 484 | + Observable<Integer> o = Observable.create(new OnSubscribe<Integer>() { |
| 485 | + |
| 486 | + @Override |
| 487 | + public void call(final Subscriber<? super Integer> s) { |
| 488 | + Schedulers.newThread().schedule(new Action1<Inner>() { |
| 489 | + |
| 490 | + @Override |
| 491 | + public void call(Inner inner) { |
| 492 | + for (int i = 0; i < 10000; i++) { |
| 493 | + s.onNext(1); |
| 494 | + } |
| 495 | + s.onCompleted(); |
| 496 | + } |
| 497 | + |
| 498 | + }); |
| 499 | + } |
| 500 | + }); |
| 501 | + |
| 502 | + for (int i = 0; i < 10; i++) { |
| 503 | + Observable<Integer> merge = Observable.merge(o, o, o); |
| 504 | + TestSubscriber<Integer> ts = new TestSubscriber<Integer>(); |
| 505 | + merge.subscribe(ts); |
| 506 | + |
| 507 | + ts.awaitTerminalEvent(); |
| 508 | + assertEquals(1, ts.getOnCompletedEvents().size()); |
| 509 | + assertEquals(30000, ts.getOnNextEvents().size()); |
| 510 | + List<Integer> onNextEvents = ts.getOnNextEvents(); |
| 511 | + // System.out.println("onNext: " + onNextEvents.size() + " onCompleted: " + ts.getOnCompletedEvents().size()); |
| 512 | + } |
| 513 | + } |
| 514 | + |
| 515 | + @Test |
| 516 | + public void testConcurrencyWithSleeping() { |
| 517 | + |
| 518 | + Observable<Integer> o = Observable.create(new OnSubscribe<Integer>() { |
| 519 | + |
| 520 | + @Override |
| 521 | + public void call(final Subscriber<? super Integer> s) { |
| 522 | + Schedulers.newThread().schedule(new Action1<Inner>() { |
| 523 | + |
| 524 | + @Override |
| 525 | + public void call(Inner inner) { |
| 526 | + for (int i = 0; i < 100; i++) { |
| 527 | + s.onNext(1); |
| 528 | + try { |
| 529 | + Thread.sleep(1); |
| 530 | + } catch (InterruptedException e) { |
| 531 | + e.printStackTrace(); |
| 532 | + } |
| 533 | + } |
| 534 | + s.onCompleted(); |
| 535 | + } |
| 536 | + |
| 537 | + }); |
| 538 | + } |
| 539 | + }); |
| 540 | + |
| 541 | + for (int i = 0; i < 10; i++) { |
| 542 | + Observable<Integer> merge = Observable.merge(o, o, o); |
| 543 | + TestSubscriber<Integer> ts = new TestSubscriber<Integer>(); |
| 544 | + merge.subscribe(ts); |
| 545 | + |
| 546 | + ts.awaitTerminalEvent(); |
| 547 | + assertEquals(1, ts.getOnCompletedEvents().size()); |
| 548 | + assertEquals(300, ts.getOnNextEvents().size()); |
| 549 | + List<Integer> onNextEvents = ts.getOnNextEvents(); |
| 550 | + // System.out.println("onNext: " + onNextEvents.size() + " onCompleted: " + ts.getOnCompletedEvents().size()); |
| 551 | + } |
| 552 | + } |
| 553 | + |
| 554 | + @Test |
| 555 | + public void testConcurrencyWithBrokenOnCompleteContract() { |
| 556 | + |
| 557 | + Observable<Integer> o = Observable.create(new OnSubscribe<Integer>() { |
| 558 | + |
| 559 | + @Override |
| 560 | + public void call(final Subscriber<? super Integer> s) { |
| 561 | + Schedulers.newThread().schedule(new Action1<Inner>() { |
| 562 | + |
| 563 | + @Override |
| 564 | + public void call(Inner inner) { |
| 565 | + for (int i = 0; i < 10000; i++) { |
| 566 | + s.onNext(1); |
| 567 | + } |
| 568 | + s.onCompleted(); |
| 569 | + s.onCompleted(); |
| 570 | + s.onCompleted(); |
| 571 | + } |
| 572 | + |
| 573 | + }); |
| 574 | + } |
| 575 | + }); |
| 576 | + |
| 577 | + for (int i = 0; i < 100; i++) { |
| 578 | + Observable<Integer> merge = Observable.merge(o, o, o); |
| 579 | + TestSubscriber<Integer> ts = new TestSubscriber<Integer>(); |
| 580 | + merge.subscribe(ts); |
| 581 | + |
| 582 | + ts.awaitTerminalEvent(); |
| 583 | + assertEquals(1, ts.getOnCompletedEvents().size()); |
| 584 | + assertEquals(30000, ts.getOnNextEvents().size()); |
| 585 | + List<Integer> onNextEvents = ts.getOnNextEvents(); |
| 586 | + // System.out.println("onNext: " + onNextEvents.size() + " onCompleted: " + ts.getOnCompletedEvents().size()); |
| 587 | + } |
| 588 | + } |
475 | 589 | }
|
0 commit comments