package com.github.davidmoten.rx.internal.operators; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; import com.github.davidmoten.rx.Actions; import com.github.davidmoten.rx.Transformers; import com.github.davidmoten.rx.testing.TestingHelper; import rx.Observable; import rx.functions.Func1; public class OnSubscribeMapLastTest { @Test public void testMapLastRequestAmount() { List<Long> list = new ArrayList<Long>(); Observable.range(1, 10) // .doOnRequest(Actions.addTo(list))// .compose(Transformers.mapLast(new Func1<Integer, Integer>() { @Override public Integer call(Integer x) { return x + 1; } })).to(TestingHelper.<Integer>testWithRequest(1)) // .assertNotCompleted() // .assertValuesAndClear(1) // .requestMore(3) // .assertValues(2, 3, 4); assertEquals(Arrays.asList(2L, 3L), list); } @Test public void testMapLastHandlesRequestOverflow() { List<Long> list = new ArrayList<Long>(); Observable.range(1, 5) // .doOnRequest(Actions.addTo(list))// .compose(Transformers.mapLast(new Func1<Integer, Integer>() { @Override public Integer call(Integer x) { return x + 1; } })).to(TestingHelper.<Integer>testWithRequest(Long.MAX_VALUE)) // .assertCompleted() // .assertValues(1, 2, 3, 4, 6); assertEquals(Arrays.asList(Long.MAX_VALUE), list); } @Test(expected = OutOfMemoryError.class) public void testMapLastHandlesFatalError() { Observable.range(1, 5) // .compose(Transformers.mapLast(new Func1<Integer, Integer>() { @Override public Integer call(Integer x) { throw new OutOfMemoryError(); } })).subscribe(); } @Test public void testMapLastHandlesNonFatalError() { final RuntimeException e = new RuntimeException(); Observable.range(1, 5) // .compose(Transformers.mapLast(new Func1<Integer, Integer>() { @Override public Integer call(Integer x) { throw e; } })).to(TestingHelper.<Integer>test()) // .assertError(e); } }