@Override public void run() { us.subscribe(to2); } };
@Override public void run() { us.subscribe(to1); } };
@Test public void onTerminateCalledWhenCanceled() { final AtomicBoolean didRunOnTerminate = new AtomicBoolean(); UnicastSubject<Integer> us = UnicastSubject.create(Observable.bufferSize(), new Runnable() { @Override public void run() { didRunOnTerminate.set(true); } }); final Disposable subscribe = us.subscribe(); assertEquals(false, didRunOnTerminate.get()); subscribe.dispose(); assertEquals(true, didRunOnTerminate.get()); }
@Test public void threeArgsFactoryFailFast() { Runnable noop = mock(Runnable.class); UnicastSubject<Integer> ap = UnicastSubject.create(16, noop, false); ap.onNext(1); ap.onError(new RuntimeException()); TestObserver<Integer> to = TestObserver.create(); ap.subscribe(to); to .assertValueCount(0) .assertError(RuntimeException.class); }
@Test public void rejectSyncFusion() { UnicastSubject<Object> p = UnicastSubject.create(); TestObserver<Object> to = ObserverFusion.newTest(QueueFuseable.SYNC); p.subscribe(to); ObserverFusion.assertFusion(to, QueueFuseable.NONE); }
@Test public void threeArgsFactoryDelayError() { Runnable noop = mock(Runnable.class); UnicastSubject<Integer> ap = UnicastSubject.create(16, noop, true); ap.onNext(1); ap.onError(new RuntimeException()); TestObserver<Integer> to = TestObserver.create(); ap.subscribe(to); to .assertValueCount(1) .assertError(RuntimeException.class); }
@Test public void failFast() { UnicastSubject<Integer> ap = UnicastSubject.create(false); ap.onNext(1); ap.onError(new RuntimeException()); TestObserver<Integer> to = TestObserver.create(); ap.subscribe(to); to .assertValueCount(0) .assertError(RuntimeException.class); }
@Test public void fusionOfflineFailFast() { UnicastSubject<Integer> ap = UnicastSubject.create(false); ap.onNext(1); ap.onError(new RuntimeException()); TestObserver<Integer> to = ObserverFusion.newTest(QueueFuseable.ANY); ap.subscribe(to); to .assertValueCount(0) .assertError(RuntimeException.class); }
@Test public void fusedDrainCancel() { for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) { final UnicastSubject<Object> p = UnicastSubject.create(); final TestObserver<Object> to = ObserverFusion.newTest(QueueFuseable.ANY); p.subscribe(to); Runnable r1 = new Runnable() { @Override public void run() { p.onNext(1); } }; Runnable r2 = new Runnable() { @Override public void run() { to.cancel(); } }; TestHelper.race(r1, r2); } }
@Test public void failFastMultipleEvents() { UnicastSubject<Integer> ap = UnicastSubject.create(false); ap.onNext(1); ap.onNext(2); ap.onNext(3); ap.onComplete(); TestObserver<Integer> to = TestObserver.create(); ap.subscribe(to); to .assertValueCount(3) .assertComplete(); }
@Test public void fusionOfflineFailFastMultipleEvents() { UnicastSubject<Integer> ap = UnicastSubject.create(false); ap.onNext(1); ap.onNext(2); ap.onNext(3); ap.onComplete(); TestObserver<Integer> to = ObserverFusion.newTest(QueueFuseable.ANY); ap.subscribe(to); to .assertValueCount(3) .assertComplete(); }
@Test public void fusionOfflie() { UnicastSubject<Integer> ap = UnicastSubject.create(); ap.onNext(1); ap.onComplete(); TestObserver<Integer> to = ObserverFusion.newTest(QueueFuseable.ANY); ap.subscribe(to); to .assertOf(ObserverFusion.<Integer>assertFuseable()) .assertOf(ObserverFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)) .assertResult(1); }
@Test public void asyncFusion() { TestObserver<Object> to = new TestObserver<Object>(); to.setInitialFusionMode(QueueFuseable.ANY); UnicastSubject<Integer> up = UnicastSubject.create(); up .subscribe(to); up.onNext(1); up.onComplete(); to.assertSubscribed() .assertFuseable() .assertFusionMode(QueueFuseable.ASYNC) .assertResult(1); }
@Test public void fusionLive() { UnicastSubject<Integer> ap = UnicastSubject.create(); TestObserver<Integer> to = ObserverFusion.newTest(QueueFuseable.ANY); ap.subscribe(to); to .assertOf(ObserverFusion.<Integer>assertFuseable()) .assertOf(ObserverFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)); to.assertNoValues().assertNoErrors().assertNotComplete(); ap.onNext(1); to.assertValue(1).assertNoErrors().assertNotComplete(); ap.onComplete(); to.assertResult(1); }
@Override protected void subscribeActual(Observer<? super T> observer) { state.subscribe(observer); } }