@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 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})); }
@Test public void testTakeOneSubscriber() { BehaviorRelay<Integer> source = BehaviorRelay.create(1); @SuppressWarnings("unchecked") final Observer<Object> o = mock(Observer.class); source.take(1).subscribe(o); verify(o).onNext(1); verify(o).onCompleted(); verifyNoMoreInteractions(o); assertEquals(0, source.subscriberCount()); assertFalse(source.hasObservers()); }
@Test public void testBehaviorRelayIncompleteEmpty() { BehaviorRelay<Integer> async = BehaviorRelay.create(); assertFalse(async.hasObservers()); 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 testThatObserverReceivesDefaultValueAndSubsequentEvents() { BehaviorRelay<String> relay = BehaviorRelay.create("default"); @SuppressWarnings("unchecked") Observer<String> observer = mock(Observer.class); relay.subscribe(observer); relay.call("one"); relay.call("two"); relay.call("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"); verifyNoMoreInteractions(observer); }
@Test public void testStartEmpty() { BehaviorRelay<Integer> source = BehaviorRelay.create(); @SuppressWarnings("unchecked") final Observer<Object> o = mock(Observer.class); InOrder inOrder = inOrder(o); source.subscribe(o); inOrder.verify(o, never()).onNext(any()); inOrder.verify(o, never()).onCompleted(); source.call(1); verify(o, never()).onError(any(Throwable.class)); verify(o, never()).onCompleted(); inOrder.verify(o).onNext(1); inOrder.verifyNoMoreInteractions(); }