@Test public void testCompletedAfterError() { ReplaySubject<String> subject = ReplaySubject.create(); Observer<String> observer = TestHelper.mockObserver(); subject.onNext("one"); subject.onError(testException); subject.onNext("two"); subject.onComplete(); subject.onError(new RuntimeException()); subject.subscribe(observer); verify(observer).onSubscribe((Disposable)notNull()); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onError(testException); verifyNoMoreInteractions(observer); }
@Test public void testError() { ReplaySubject<String> subject = ReplaySubject.create(); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("one"); subject.onNext("two"); subject.onNext("three"); subject.onError(testException); subject.onNext("four"); subject.onError(new Throwable()); subject.onComplete(); assertErrorSubscriber(observer); observer = TestHelper.mockObserver(); subject.subscribe(observer); assertErrorSubscriber(observer); }
@Test public void testSizeAndHasAnyValueEffectivelyUnboundedEmptyError() { ReplaySubject<Object> rs = ReplaySubject.createUnbounded(); rs.onError(new TestException()); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); }
channel.onNext(14); channel.onNext(15); channel.onError(new RuntimeException());
@Test public void testSizeAndHasAnyValueUnboundedEmptyError() { ReplaySubject<Object> rs = ReplaySubject.create(); rs.onError(new TestException()); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); }
subject.onError(e); s.cancel(); });
@Test public void sizeboundReplayError() { ReplaySubject<Integer> rp = ReplaySubject.createWithSize(2); rp.onNext(1); rp.onNext(2); rp.onNext(3); rp.onNext(4); rp.onError(new TestException()); rp.test() .assertFailure(TestException.class, 3, 4); }
@Test public void sizeAndTimeBoundReplayError() { ReplaySubject<Integer> rp = ReplaySubject.createWithTimeAndSize(1, TimeUnit.DAYS, Schedulers.single(), 2); rp.onNext(1); rp.onNext(2); rp.onNext(3); rp.onNext(4); rp.onError(new TestException()); rp.test() .assertFailure(TestException.class, 3, 4); }
@Test public void testCompleted() { ReplaySubject<String> subject = ReplaySubject.create(); Observer<String> o1 = TestHelper.mockObserver(); subject.subscribe(o1); subject.onNext("one"); subject.onNext("two"); subject.onNext("three"); subject.onComplete(); subject.onNext("four"); subject.onComplete(); subject.onError(new Throwable()); assertCompletedSubscriber(o1); // assert that subscribing a 2nd time gets the same data Observer<String> o2 = TestHelper.mockObserver(); subject.subscribe(o2); assertCompletedSubscriber(o2); }
@Test public void testCurrentStateMethodsError() { ReplaySubject<Object> as = ReplaySubject.create(); assertFalse(as.hasThrowable()); assertFalse(as.hasComplete()); assertNull(as.getThrowable()); as.onError(new TestException()); assertTrue(as.hasThrowable()); assertFalse(as.hasComplete()); assertTrue(as.getThrowable() instanceof TestException); }
@Test public void testSizeAndHasAnyValueUnboundedError() { ReplaySubject<Object> rs = ReplaySubject.create(); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); rs.onNext(1); assertEquals(1, rs.size()); assertTrue(rs.hasValue()); rs.onNext(1); assertEquals(2, rs.size()); assertTrue(rs.hasValue()); rs.onError(new TestException()); assertEquals(2, rs.size()); assertTrue(rs.hasValue()); }
@Test public void testSizeAndHasAnyValueEffectivelyUnboundedError() { ReplaySubject<Object> rs = ReplaySubject.createUnbounded(); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); rs.onNext(1); assertEquals(1, rs.size()); assertTrue(rs.hasValue()); rs.onNext(1); assertEquals(2, rs.size()); assertTrue(rs.hasValue()); rs.onError(new TestException()); assertEquals(2, rs.size()); assertTrue(rs.hasValue()); }
@Test public void testReplaySubjectError() { ReplaySubject<Integer> async = ReplaySubject.create(); TestException te = new TestException(); async.onError(te); Subject<Integer> serial = async.toSerialized(); assertFalse(serial.hasObservers()); assertFalse(serial.hasComplete()); assertTrue(serial.hasThrowable()); assertSame(te, serial.getThrowable()); assertNull(async.getValue()); assertFalse(async.hasValue()); assertArrayEquals(new Object[] { }, async.getValues()); assertArrayEquals(new Integer[] { }, async.getValues(new Integer[0])); assertArrayEquals(new Integer[] { null }, async.getValues(new Integer[] { 0 })); assertArrayEquals(new Integer[] { null, 0 }, async.getValues(new Integer[] { 0, 0 })); }
@Test public void testReplaySubjectBoundedError() { ReplaySubject<Integer> async = ReplaySubject.createWithSize(1); TestException te = new TestException(); async.onError(te); Subject<Integer> serial = async.toSerialized(); assertFalse(serial.hasObservers()); assertFalse(serial.hasComplete()); assertTrue(serial.hasThrowable()); assertSame(te, serial.getThrowable()); assertNull(async.getValue()); assertFalse(async.hasValue()); assertArrayEquals(new Object[] { }, async.getValues()); assertArrayEquals(new Integer[] { }, async.getValues(new Integer[0])); assertArrayEquals(new Integer[] { null }, async.getValues(new Integer[] { 0 })); assertArrayEquals(new Integer[] { null, 0 }, async.getValues(new Integer[] { 0, 0 })); }
@Test public void peekStateTimeAndSizeValue() { ReplaySubject<Integer> rp = ReplaySubject.createWithTimeAndSize(1, TimeUnit.DAYS, Schedulers.computation(), 1); assertNull(rp.getValue()); assertEquals(0, rp.getValues().length); assertNull(rp.getValues(new Integer[2])[0]); rp.onComplete(); assertNull(rp.getValue()); assertEquals(0, rp.getValues().length); assertNull(rp.getValues(new Integer[2])[0]); rp = ReplaySubject.createWithTimeAndSize(1, TimeUnit.DAYS, Schedulers.computation(), 1); rp.onError(new TestException()); assertNull(rp.getValue()); assertEquals(0, rp.getValues().length); assertNull(rp.getValues(new Integer[2])[0]); }