@Test public void reentrantOnNextCancel() { final PublishSubject<Integer> ps = PublishSubject.create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { if (t == 1) { ps.onNext(2); cancel(); } super.onNext(t); } }; ps.replay().autoConnect().subscribe(to); ps.onNext(1); to.assertValues(1); }
PublishSubject<Integer> source = PublishSubject.create(); ConnectableObservable<Integer> co = source.replay(3); co.connect();
@Test public void reentrantOnNextBound() { final PublishSubject<Integer> ps = PublishSubject.create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { if (t == 1) { ps.onNext(2); ps.onComplete(); } super.onNext(t); } }; ps.replay(10).autoConnect().subscribe(to); ps.onNext(1); to.assertResult(1, 2); }
@Test public void reentrantOnNextCancelBounded() { final PublishSubject<Integer> ps = PublishSubject.create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { if (t == 1) { ps.onNext(2); cancel(); } super.onNext(t); } }; ps.replay(10).autoConnect().subscribe(to); ps.onNext(1); to.assertValues(1); }
@Test public void reentrantOnNext() { final PublishSubject<Integer> ps = PublishSubject.create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { if (t == 1) { ps.onNext(2); ps.onComplete(); } super.onNext(t); } }; ps.replay().autoConnect().subscribe(to); ps.onNext(1); to.assertResult(1, 2); }
PublishSubject<Integer> source = PublishSubject.create(); ConnectableObservable<Integer> co = source.replay(3); co.connect();
Observable<Integer> co = source.replay(selector);
Observable<Integer> co = source.replay(selector, 3);
ConnectableObservable<Integer> co = source.replay(100, TimeUnit.MILLISECONDS, scheduler); co.connect();
PublishSubject<Integer> source = PublishSubject.create(); TestScheduler scheduler = new TestScheduler(); ConnectableObservable<Integer> co = source.replay(3, 100, TimeUnit.MILLISECONDS, scheduler); co.connect();
ConnectableObservable<Integer> co = source.replay(100, TimeUnit.MILLISECONDS, scheduler); co.connect();
@Test public void subscribeOnNextRace() { for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) { final PublishSubject<Integer> ps = PublishSubject.create(); final ConnectableObservable<Integer> co = ps.replay(); final TestObserver<Integer> to1 = new TestObserver<Integer>(); Runnable r1 = new Runnable() { @Override public void run() { co.subscribe(to1); } }; Runnable r2 = new Runnable() { @Override public void run() { for (int j = 0; j < 1000; j++) { ps.onNext(j); } } }; TestHelper.race(r1, r2); } }
@Test public void cancelOnArrival2() { ConnectableObservable<Integer> co = PublishSubject.<Integer>create() .replay(Integer.MAX_VALUE); co.test(); co .autoConnect() .test(true) .assertEmpty(); }
@Test public void unsubscribeOnNextRace() { for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) { final PublishSubject<Integer> ps = PublishSubject.create(); final ConnectableObservable<Integer> co = ps.replay(); final TestObserver<Integer> to1 = new TestObserver<Integer>(); co.subscribe(to1); Runnable r1 = new Runnable() { @Override public void run() { to1.dispose(); } }; Runnable r2 = new Runnable() { @Override public void run() { for (int j = 0; j < 1000; j++) { ps.onNext(j); } } }; TestHelper.race(r1, r2); } }
@Test public void noHeadRetentionCompleteSize() { PublishSubject<Integer> source = PublishSubject.create(); ObservableReplay<Integer> co = (ObservableReplay<Integer>)source .replay(1); co.connect(); BoundedReplayBuffer<Integer> buf = (BoundedReplayBuffer<Integer>)(co.current.get().buffer); source.onNext(1); source.onNext(2); source.onComplete(); assertNull(buf.get().value); Object o = buf.get(); buf.trimHead(); assertSame(o, buf.get()); }
@Test public void noHeadRetentionCompleteTime() { PublishSubject<Integer> source = PublishSubject.create(); ObservableReplay<Integer> co = (ObservableReplay<Integer>)source .replay(1, TimeUnit.MINUTES, Schedulers.computation()); co.connect(); BoundedReplayBuffer<Integer> buf = (BoundedReplayBuffer<Integer>)(co.current.get().buffer); source.onNext(1); source.onNext(2); source.onComplete(); assertNull(buf.get().value); Object o = buf.get(); buf.trimHead(); assertSame(o, buf.get()); }
@Test public void noHeadRetentionErrorSize() { PublishSubject<Integer> source = PublishSubject.create(); ObservableReplay<Integer> co = (ObservableReplay<Integer>)source .replay(1); co.connect(); BoundedReplayBuffer<Integer> buf = (BoundedReplayBuffer<Integer>)(co.current.get().buffer); source.onNext(1); source.onNext(2); source.onError(new TestException()); assertNull(buf.get().value); Object o = buf.get(); buf.trimHead(); assertSame(o, buf.get()); }
@Test public void noHeadRetentionErrorTime() { PublishSubject<Integer> source = PublishSubject.create(); ObservableReplay<Integer> co = (ObservableReplay<Integer>)source .replay(1, TimeUnit.MINUTES, Schedulers.computation()); co.connect(); BoundedReplayBuffer<Integer> buf = (BoundedReplayBuffer<Integer>)(co.current.get().buffer); source.onNext(1); source.onNext(2); source.onError(new TestException()); assertNull(buf.get().value); Object o = buf.get(); buf.trimHead(); assertSame(o, buf.get()); }
@Test public void noHeadRetentionSize() { PublishSubject<Integer> source = PublishSubject.create(); ObservableReplay<Integer> co = (ObservableReplay<Integer>)source .replay(1); co.connect(); BoundedReplayBuffer<Integer> buf = (BoundedReplayBuffer<Integer>)(co.current.get().buffer); source.onNext(1); source.onNext(2); assertNotNull(buf.get().value); buf.trimHead(); assertNull(buf.get().value); Object o = buf.get(); buf.trimHead(); assertSame(o, buf.get()); }
@Test public void noHeadRetentionTime() { TestScheduler sch = new TestScheduler(); PublishSubject<Integer> source = PublishSubject.create(); ObservableReplay<Integer> co = (ObservableReplay<Integer>)source .replay(1, TimeUnit.MILLISECONDS, sch); co.connect(); BoundedReplayBuffer<Integer> buf = (BoundedReplayBuffer<Integer>)(co.current.get().buffer); source.onNext(1); sch.advanceTimeBy(2, TimeUnit.MILLISECONDS); source.onNext(2); assertNotNull(buf.get().value); buf.trimHead(); assertNull(buf.get().value); Object o = buf.get(); buf.trimHead(); assertSame(o, buf.get()); }