@Test(timeout = 1000) public void testUnsubscriptionCase() { BehaviorRelay<String> src = BehaviorRelay.create((String) null); for (int i = 0; i < 10; i++) { @SuppressWarnings("unchecked") final Observer<Object> o = mock(Observer.class); InOrder inOrder = inOrder(o); String v = "" + i; src.call(v); System.out.printf("Turn: %d%n", i); src.first() .flatMap( new Func1<String, Observable<String>>() { @Override public Observable<String> call(String t1) { return Observable.just(t1 + ", " + t1); } }) .subscribe(o); inOrder.verify(o).onNext(v + ", " + v); inOrder.verify(o).onCompleted(); verify(o, never()).onError(any(Throwable.class)); } }
@Test public void testThatObserverReceivesLatestAndThenSubsequentEvents() { BehaviorRelay<String> relay = BehaviorRelay.create("default"); relay.call("one"); @SuppressWarnings("unchecked") Observer<String> observer = mock(Observer.class); relay.subscribe(observer); relay.call("two"); relay.call("three"); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onNext("two"); verify(observer, times(1)).onNext("three"); verifyNoMoreInteractions(observer); }
@Test public void testStartEmptyThenAddOne() { BehaviorRelay<Integer> source = BehaviorRelay.create(); @SuppressWarnings("unchecked") final Observer<Object> o = mock(Observer.class); InOrder inOrder = inOrder(o); source.call(1); source.subscribe(o); inOrder.verify(o).onNext(1); source.call(2); inOrder.verify(o).onNext(2); verify(o, never()).onCompleted(); verify(o, never()).onError(any(Throwable.class)); inOrder.verifyNoMoreInteractions(); }
@Test public void testBehaviorRelayValueRelayIncomplete() { BehaviorRelay<Integer> async = BehaviorRelay.create(); async.call(1); assertFalse(async.hasObservers()); 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})); }