@Test public void innerErrorsImmediate() { AssertSubscriber<Integer> ts = AssertSubscriber.create(); DirectProcessor<Integer> source = DirectProcessor.create(); DirectProcessor<Integer> source1 = DirectProcessor.create(); DirectProcessor<Integer> source2 = DirectProcessor.create(); source.concatMap(v -> v == 1 ? source1 : source2) .subscribe(ts); ts.assertNoValues() .assertNoError() .assertNotComplete(); source.onNext(1); Assert.assertTrue("source1 no subscribers?", source1.hasDownstreams()); Assert.assertFalse("source2 has subscribers?", source2.hasDownstreams()); source1.onNext(1); source1.onError(new RuntimeException("forced failure")); ts.assertValues(1) .assertError(RuntimeException.class) .assertErrorMessage("forced failure") .assertNotComplete(); Assert.assertFalse("source1 has subscribers?", source1.hasDownstreams()); Assert.assertFalse("source2 has subscribers?", source2.hasDownstreams()); }
@Test public void mainErrorsImmediate() { AssertSubscriber<Integer> ts = AssertSubscriber.create(); DirectProcessor<Integer> source = DirectProcessor.create(); DirectProcessor<Integer> source1 = DirectProcessor.create(); DirectProcessor<Integer> source2 = DirectProcessor.create(); source.concatMap(v -> v == 1 ? source1 : source2) .subscribe(ts); ts.assertNoValues() .assertNoError() .assertNotComplete(); source.onNext(1); Assert.assertTrue("source1 no subscribers?", source1.hasDownstreams()); Assert.assertFalse("source2 has subscribers?", source2.hasDownstreams()); source1.onNext(1); source.onError(new RuntimeException("forced failure")); ts.assertValues(1) .assertError(RuntimeException.class) .assertErrorMessage("forced failure") .assertNotComplete(); Assert.assertFalse("source1 has subscribers?", source1.hasDownstreams()); Assert.assertFalse("source2 has subscribers?", source2.hasDownstreams()); }
@Test public void singleSubscriberOnly() { AssertSubscriber<Integer> ts = AssertSubscriber.create(); DirectProcessor<Integer> source = DirectProcessor.create(); DirectProcessor<Integer> source1 = DirectProcessor.create(); DirectProcessor<Integer> source2 = DirectProcessor.create(); source.concatMap(v -> v == 1 ? source1 : source2) .subscribe(ts); ts.assertNoValues() .assertNoError() .assertNotComplete(); source.onNext(1); source.onNext(2); Assert.assertTrue("source1 no subscribers?", source1.hasDownstreams()); Assert.assertFalse("source2 has subscribers?", source2.hasDownstreams()); source1.onNext(1); source2.onNext(10); source1.onComplete(); source.onComplete(); source2.onNext(2); source2.onComplete(); ts.assertValues(1, 2) .assertNoError() .assertComplete(); }