@Override public void run() { rs.onComplete(); } });
@Override public void run() { rs.onComplete(); } });
@Override public void run() { subject.onNext("value"); subject.onComplete(); } });
@Override public void run() { subject.onNext("value"); subject.onComplete(); } });
@Override public void run() { try { cb.await(); } catch (InterruptedException e) { return; } catch (BrokenBarrierException e) { return; } for (int i = 0; i < 1000000; i++) { rs.onNext(i); } rs.onComplete(); System.out.println("Replay fill Thread finished!"); } });
@Test public void testReplay1AfterTermination() { ReplaySubject<Integer> source = ReplaySubject.createWithSize(1); source.onNext(1); source.onNext(2); source.onComplete(); for (int i = 0; i < 1; i++) { Observer<Integer> o = TestHelper.mockObserver(); source.subscribe(o); verify(o, never()).onNext(1); verify(o).onNext(2); verify(o).onComplete(); verify(o, never()).onError(any(Throwable.class)); } }
@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 testGetValuesUnbounded() { ReplaySubject<Object> rs = ReplaySubject.createUnbounded(); Object[] expected = new Object[10]; for (int i = 0; i < expected.length; i++) { expected[i] = i; rs.onNext(i); assertArrayEquals(Arrays.copyOf(expected, i + 1), rs.getValues()); } rs.onComplete(); assertArrayEquals(expected, rs.getValues()); }
@Test public void testGetValues() { ReplaySubject<Object> rs = ReplaySubject.create(); Object[] expected = new Object[10]; for (int i = 0; i < expected.length; i++) { expected[i] = i; rs.onNext(i); assertArrayEquals(Arrays.copyOf(expected, i + 1), rs.getValues()); } rs.onComplete(); assertArrayEquals(expected, rs.getValues()); }
@Test public void capacityHint() { ReplaySubject<Integer> rp = ReplaySubject.create(8); for (int i = 0; i < 15; i++) { rp.onNext(i); } rp.onComplete(); rp.test().assertResult(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14); }
@Test public void testSizeAndHasAnyValueEffectivelyUnboundedEmptyCompleted() { ReplaySubject<Object> rs = ReplaySubject.createUnbounded(); rs.onComplete(); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); }
@Test public void subscribeAfterDone() { ReplaySubject<Integer> rp = ReplaySubject.create(); rp.onComplete(); Disposable bs = Disposables.empty(); rp.onSubscribe(bs); assertTrue(bs.isDisposed()); }
@Test public void testSizeAndHasAnyValueUnboundedEmptyCompleted() { ReplaySubject<Object> rs = ReplaySubject.create(); rs.onComplete(); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); }
@Test public void noHeadRetentionCompleteSize() { ReplaySubject<Integer> source = ReplaySubject.createWithSize(1); source.onNext(1); source.onNext(2); source.onComplete(); SizeBoundReplayBuffer<Integer> buf = (SizeBoundReplayBuffer<Integer>)source.buffer; assertNull(buf.head.value); Object o = buf.head; source.cleanupBuffer(); assertSame(o, buf.head); }
@Test public void noHeadRetentionCompleteTime() { ReplaySubject<Integer> source = ReplaySubject.createWithTime(1, TimeUnit.MINUTES, Schedulers.computation()); source.onNext(1); source.onNext(2); source.onComplete(); SizeAndTimeBoundReplayBuffer<Integer> buf = (SizeAndTimeBoundReplayBuffer<Integer>)source.buffer; assertNull(buf.head.value); Object o = buf.head; source.cleanupBuffer(); assertSame(o, buf.head); }
@Test public void timedNoOutdatedData() { TestScheduler scheduler = new TestScheduler(); ReplaySubject<Integer> source = ReplaySubject.createWithTime(2, TimeUnit.SECONDS, scheduler); source.onNext(1); source.onComplete(); source.test().assertResult(1); source.test().assertResult(1); scheduler.advanceTimeBy(3, TimeUnit.SECONDS); source.test().assertResult(); }
@Test public void testCurrentStateMethodsEmpty() { ReplaySubject<Object> as = ReplaySubject.create(); assertFalse(as.hasThrowable()); assertFalse(as.hasComplete()); assertNull(as.getThrowable()); as.onComplete(); assertFalse(as.hasThrowable()); assertTrue(as.hasComplete()); assertNull(as.getThrowable()); }
@Test public void testSizeAndHasAnyValueSizeBounded() { ReplaySubject<Object> rs = ReplaySubject.createWithSize(1); assertEquals(0, rs.size()); assertFalse(rs.hasValue()); for (int i = 0; i < 1000; i++) { rs.onNext(i); assertEquals(1, rs.size()); assertTrue(rs.hasValue()); } rs.onComplete(); assertEquals(1, rs.size()); assertTrue(rs.hasValue()); }
@Test public void testSizeAndHasAnyValueUnbounded() { 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.onComplete(); assertEquals(2, rs.size()); assertTrue(rs.hasValue()); }
@Test public void testCurrentStateMethodsNormal() { ReplaySubject<Object> as = ReplaySubject.create(); assertFalse(as.hasThrowable()); assertFalse(as.hasComplete()); assertNull(as.getThrowable()); as.onNext(1); assertFalse(as.hasThrowable()); assertFalse(as.hasComplete()); assertNull(as.getThrowable()); as.onComplete(); assertFalse(as.hasThrowable()); assertTrue(as.hasComplete()); assertNull(as.getThrowable()); }