@Override public void run() { p.onNext(2); } };
@Override public void run() throws Exception { disposeCalled.incrementAndGet(); s.onNext(2); } })
@Override public void run() { try { start.await(); } catch (Exception e1) { e1.printStackTrace(); } rs.onNext(1); } });
@Test public void testThatSubscriberReceivesDefaultValueAndSubsequentEvents() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("one"); subject.onNext("two"); subject.onNext("three"); verify(observer, times(1)).onNext("default"); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onNext("two"); verify(observer, times(1)).onNext("three"); verify(observer, Mockito.never()).onError(testException); verify(observer, Mockito.never()).onComplete(); }
@Test public void testThatSubscriberReceivesLatestAndThenSubsequentEvents() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); subject.onNext("one"); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("two"); subject.onNext("three"); verify(observer, Mockito.never()).onNext("default"); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onNext("two"); verify(observer, times(1)).onNext("three"); verify(observer, Mockito.never()).onError(testException); verify(observer, Mockito.never()).onComplete(); }
@Test public void testStartEmptyCompleteWithOne() { BehaviorSubject<Integer> source = BehaviorSubject.create(); final Observer<Object> o = TestHelper.mockObserver(); source.onNext(1); source.onComplete(); source.onNext(2); source.subscribe(o); verify(o).onComplete(); verify(o, never()).onError(any(Throwable.class)); verify(o, never()).onNext(any()); }
@Test public void testSubscribeToCompletedOnlyEmitsOnComplete() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); subject.onNext("one"); subject.onComplete(); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); verify(observer, never()).onNext("default"); verify(observer, never()).onNext("one"); verify(observer, Mockito.never()).onError(any(Throwable.class)); verify(observer, times(1)).onComplete(); }
@Test public void testSubscribeThenOnComplete() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("one"); subject.onComplete(); verify(observer, times(1)).onNext("default"); verify(observer, times(1)).onNext("one"); verify(observer, Mockito.never()).onError(any(Throwable.class)); verify(observer, times(1)).onComplete(); }
@Test public void testSubscribeToErrorOnlyEmitsOnError() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); subject.onNext("one"); RuntimeException re = new RuntimeException("test error"); subject.onError(re); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); verify(observer, never()).onNext("default"); verify(observer, never()).onNext("one"); verify(observer, times(1)).onError(re); verify(observer, never()).onComplete(); }
@Test public void testCompletedAfterErrorIsNotSent() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("one"); subject.onError(testException); subject.onNext("two"); subject.onComplete(); verify(observer, times(1)).onNext("default"); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onError(testException); verify(observer, never()).onNext("two"); verify(observer, never()).onComplete(); }
@Test public void testStartEmpty() { BehaviorSubject<Integer> source = BehaviorSubject.create(); final Observer<Object> o = TestHelper.mockObserver(); InOrder inOrder = inOrder(o); source.subscribe(o); inOrder.verify(o, never()).onNext(any()); inOrder.verify(o, never()).onComplete(); source.onNext(1); source.onComplete(); source.onNext(2); verify(o, never()).onError(any(Throwable.class)); inOrder.verify(o).onNext(1); inOrder.verify(o).onComplete(); inOrder.verifyNoMoreInteractions(); }
@Test public void testStartEmptyThenAddOne() { BehaviorSubject<Integer> source = BehaviorSubject.create(); final Observer<Object> o = TestHelper.mockObserver(); InOrder inOrder = inOrder(o); source.onNext(1); source.subscribe(o); inOrder.verify(o).onNext(1); source.onComplete(); source.onNext(2); inOrder.verify(o).onComplete(); inOrder.verifyNoMoreInteractions(); verify(o, never()).onError(any(Throwable.class)); }
@Test public void testCompletedAfterErrorIsNotSent3() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("one"); subject.onComplete(); subject.onNext("two"); subject.onComplete(); verify(observer, times(1)).onNext("default"); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onComplete(); verify(observer, never()).onError(any(Throwable.class)); verify(observer, never()).onNext("two"); Observer<Object> o2 = TestHelper.mockObserver(); subject.subscribe(o2); verify(o2, times(1)).onComplete(); verify(o2, never()).onNext(any()); verify(observer, never()).onError(any(Throwable.class)); }
@Test public void testCompletedAfterErrorIsNotSent2() { BehaviorSubject<String> subject = BehaviorSubject.createDefault("default"); Observer<String> observer = TestHelper.mockObserver(); subject.subscribe(observer); subject.onNext("one"); subject.onError(testException); subject.onNext("two"); subject.onComplete(); verify(observer, times(1)).onNext("default"); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onError(testException); verify(observer, never()).onNext("two"); verify(observer, never()).onComplete(); Observer<Object> o2 = TestHelper.mockObserver(); subject.subscribe(o2); verify(o2, times(1)).onError(testException); verify(o2, never()).onNext(any()); verify(o2, never()).onComplete(); }
@Test public void disconnectBeforeConnect() { BehaviorSubject<Integer> subject = BehaviorSubject.create(); Observable<Integer> observable = subject .replay(1) .refCount(); observable.takeUntil(Observable.just(1)).test(); subject.onNext(2); observable.take(1).test().assertResult(2); } }
@Test public void cancelOnArrival2() { BehaviorSubject<Object> p = BehaviorSubject.create(); TestObserver<Object> to = p.test(); p.test(true).assertEmpty(); p.onNext(1); p.onComplete(); to.assertResult(1); }
@Test public void emittingEmitNext() { BehaviorSubject<Integer> bs = BehaviorSubject.create(); bs.onNext(1); TestObserver<Integer> to = new TestObserver<Integer>(); final BehaviorDisposable<Integer> bd = new BehaviorDisposable<Integer>(to, bs); to.onSubscribe(bd); bd.emitting = true; bd.emitNext(2, 1); bd.emitNext(3, 2); assertNotNull(bd.queue); } }
@Test public void behaviorDisposableDisposeState() { BehaviorSubject<Integer> bs = BehaviorSubject.create(); bs.onNext(1); TestObserver<Integer> to = new TestObserver<Integer>(); BehaviorDisposable<Integer> bd = new BehaviorDisposable<Integer>(to, bs); to.onSubscribe(bd); assertFalse(bd.isDisposed()); bd.dispose(); assertTrue(bd.isDisposed()); bd.dispose(); assertTrue(bd.isDisposed()); assertTrue(bd.test(2)); bd.emitFirst(); to.assertEmpty(); bd.emitNext(2, 0); }
@SuppressWarnings("deprecation") @Test public void testBehaviorSubjectValueRelayIncomplete() { BehaviorSubject<Integer> async = BehaviorSubject.create(); async.onNext(1); Subject<Integer> serial = async.toSerialized(); assertFalse(serial.hasObservers()); assertFalse(serial.hasComplete()); assertFalse(serial.hasThrowable()); assertNull(serial.getThrowable()); assertEquals((Integer)1, async.getValue()); assertTrue(async.hasValue()); assertArrayEquals(new Object[] { 1 }, async.getValues()); assertArrayEquals(new Integer[] { 1 }, async.getValues(new Integer[0])); assertArrayEquals(new Integer[] { 1 }, async.getValues(new Integer[] { 0 })); assertArrayEquals(new Integer[] { 1, null }, async.getValues(new Integer[] { 0, 0 })); }
@SuppressWarnings("deprecation") @Test public void testBehaviorSubjectValueRelay() { BehaviorSubject<Integer> async = BehaviorSubject.create(); async.onNext(1); async.onComplete(); Subject<Integer> serial = async.toSerialized(); assertFalse(serial.hasObservers()); assertTrue(serial.hasComplete()); assertFalse(serial.hasThrowable()); assertNull(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 })); }