@Override public void run() { cf.test(); } };
@Test public void createBufferFactoryCrashOnSubscribe() { FlowableReplay.create(Flowable.just(1), new Callable<ReplayBuffer<Integer>>() { @Override public ReplayBuffer<Integer> call() throws Exception { throw new TestException(); } }) .test() .assertFailure(TestException.class); }
@Test public void disposeOnArrival() { ConnectableFlowable<Integer> cf = Flowable.<Integer>empty().publish(); cf.test(Long.MAX_VALUE, true).assertEmpty(); }
@Test public void nextCancelRace() { for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) { final PublishProcessor<Integer> pp = PublishProcessor.create(); final ConnectableFlowable<Integer> cf = pp.publish(); final TestSubscriber<Integer> ts = cf.test(); Runnable r1 = new Runnable() { @Override public void run() { pp.onNext(1); } }; Runnable r2 = new Runnable() { @Override public void run() { ts.cancel(); } }; TestHelper.race(r1, r2); } }
@Test public void connectConsumerThrows() { ConnectableFlowable<Integer> cf = Flowable.range(1, 2) .replay(); try { cf.connect(new Consumer<Disposable>() { @Override public void accept(Disposable t) throws Exception { throw new TestException(); } }); fail("Should have thrown"); } catch (TestException ex) { // expected } cf.test().assertEmpty().cancel(); cf.connect(); cf.test().assertResult(1, 2); }
@Test public void cancelOnArrival2() { ConnectableFlowable<Integer> cf = PublishProcessor.<Integer>create() .replay(Integer.MAX_VALUE); cf.test(); cf .autoConnect() .test(Long.MAX_VALUE, true) .assertEmpty(); }
@Test public void addRemoveRace() { for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) { final ConnectableFlowable<Integer> cf = Flowable.<Integer>empty().publish(); final TestSubscriber<Integer> ts = cf.test(); final TestSubscriber<Integer> ts2 = new TestSubscriber<Integer>(); Runnable r1 = new Runnable() { @Override public void run() { cf.subscribe(ts2); } }; Runnable r2 = new Runnable() { @Override public void run() { ts.cancel(); } }; TestHelper.race(r1, r2); } }
TestSubscriber<Integer> ts2 = cf.test();
.publish(); TestSubscriber<Integer> ts = cf.test(); cf.connect();
@Test public void doOnNextDoOnErrorFused() { ConnectableFlowable<Integer> cf = Flowable.just(1) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer v) throws Exception { throw new TestException("First"); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { throw new TestException("Second"); } }) .publish(); TestSubscriber<Integer> ts = cf.test(); cf.connect(); ts.assertFailure(CompositeException.class); TestHelper.assertError(ts, 0, TestException.class, "First"); TestHelper.assertError(ts, 1, TestException.class, "Second"); }
@Test public void doOnNextDoOnErrorFusedConditional() { ConnectableFlowable<Integer> cf = Flowable.just(1) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer v) throws Exception { throw new TestException("First"); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { throw new TestException("Second"); } }) .filter(Functions.alwaysTrue()) .publish(); TestSubscriber<Integer> ts = cf.test(); cf.connect(); ts.assertFailure(CompositeException.class); TestHelper.assertError(ts, 0, TestException.class, "First"); TestHelper.assertError(ts, 1, TestException.class, "Second"); }
.publish(); TestSubscriber<Integer> ts = cf.test(); cf.connect();
@Test public void doOnNextDoOnErrorFused2() { ConnectableFlowable<Integer> cf = Flowable.just(1) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer v) throws Exception { throw new TestException("First"); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { throw new TestException("Second"); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { throw new TestException("Third"); } }) .publish(); TestSubscriber<Integer> ts = cf.test(); cf.connect(); ts.assertFailure(CompositeException.class); TestHelper.assertError(ts, 0, TestException.class, "First"); TestHelper.assertError(ts, 1, TestException.class, "Second"); TestHelper.assertError(ts, 2, TestException.class, "Third"); }
@Test public void doOnNextDoOnErrorFusedConditional2() { ConnectableFlowable<Integer> cf = Flowable.just(1) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer v) throws Exception { throw new TestException("First"); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { throw new TestException("Second"); } }) .doOnError(new Consumer<Throwable>() { @Override public void accept(Throwable e) throws Exception { throw new TestException("Third"); } }) .filter(Functions.alwaysTrue()) .publish(); TestSubscriber<Integer> ts = cf.test(); cf.connect(); ts.assertFailure(CompositeException.class); TestHelper.assertError(ts, 0, TestException.class, "First"); TestHelper.assertError(ts, 1, TestException.class, "Second"); TestHelper.assertError(ts, 2, TestException.class, "Third"); }