@Override public Single<ArrayList<Integer>> apply(Flowable<Integer> f) throws Exception { return f.collect(Functions.justCallable(new ArrayList<Integer>()), new BiConsumer<ArrayList<Integer>, Integer>() { @Override public void accept(ArrayList<Integer> a, Integer b) throws Exception { a.add(b); } }); } });
@Test(expected = NullPointerException.class) public void collectInitialSupplierNull() { just1.collect((Callable<Integer>)null, new BiConsumer<Integer, Integer>() { @Override public void accept(Integer a, Integer b) { } }); }
@Test(expected = NullPointerException.class) public void collectInitialCollectorNull() { just1.collect(new Callable<Object>() { @Override public Object call() { return 1; } }, null); }
@Override public Flowable<ArrayList<Integer>> apply(Flowable<Integer> f) throws Exception { return f.collect(Functions.justCallable(new ArrayList<Integer>()), new BiConsumer<ArrayList<Integer>, Integer>() { @Override public void accept(ArrayList<Integer> a, Integer b) throws Exception { a.add(b); } }).toFlowable(); } });
@Test(expected = NullPointerException.class) public void collectInitialSupplierReturnsNull() { just1.collect(new Callable<Object>() { @Override public Object call() { return null; } }, new BiConsumer<Object, Integer>() { @Override public void accept(Object a, Integer b) { } }).blockingGet(); }
@Override public Publisher<List<Integer>> createPublisher(final long elements) { return Flowable.range(1, 1000).collect(Functions.<Integer>createArrayList(128), new BiConsumer<List<Integer>, Integer>() { @Override public void accept(List<Integer> a, Integer b) throws Exception { a.add(b); } }).toFlowable() ; }
@Test public void testCollectToList() { Single<List<Integer>> o = Flowable.just(1, 2, 3) .collect(new Callable<List<Integer>>() { @Override public List<Integer> call() { return new ArrayList<Integer>(); } }, new BiConsumer<List<Integer>, Integer>() { @Override public void accept(List<Integer> list, Integer v) { list.add(v); } }); List<Integer> list = o.blockingGet(); assertEquals(3, list.size()); assertEquals(1, list.get(0).intValue()); assertEquals(2, list.get(1).intValue()); assertEquals(3, list.get(2).intValue()); // test multiple subscribe List<Integer> list2 = o.blockingGet(); assertEquals(3, list2.size()); assertEquals(1, list2.get(0).intValue()); assertEquals(2, list2.get(1).intValue()); assertEquals(3, list2.get(2).intValue()); }
@Test public void dispose() { TestHelper.checkDisposed(Flowable.just(1, 2) .collect(Functions.justCallable(new ArrayList<Integer>()), new BiConsumer<ArrayList<Integer>, Integer>() { @Override public void accept(ArrayList<Integer> a, Integer b) throws Exception { a.add(b); } })); TestHelper.checkDisposed(Flowable.just(1, 2) .collect(Functions.justCallable(new ArrayList<Integer>()), new BiConsumer<ArrayList<Integer>, Integer>() { @Override public void accept(ArrayList<Integer> a, Integer b) throws Exception { a.add(b); } }).toFlowable()); }
@Test public void testCollectToString() { String value = Flowable.just(1, 2, 3) .collect( new Callable<StringBuilder>() { @Override public StringBuilder call() { return new StringBuilder(); } }, new BiConsumer<StringBuilder, Integer>() { @Override public void accept(StringBuilder sb, Integer v) { if (sb.length() > 0) { sb.append("-"); } sb.append(v); } }).blockingGet().toString(); assertEquals("1-2-3", value); }
/** * This uses the public API collect which uses scan under the covers. */ @Test public void testSeedFactory() { Single<List<Integer>> o = Flowable.range(1, 10) .collect(new Callable<List<Integer>>() { @Override public List<Integer> call() { return new ArrayList<Integer>(); } }, new BiConsumer<List<Integer>, Integer>() { @Override public void accept(List<Integer> list, Integer t2) { list.add(t2); } }); assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), o.blockingGet()); assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), o.blockingGet()); }
@Test public void testCollectToStringFlowable() { String value = Flowable.just(1, 2, 3) .collect( new Callable<StringBuilder>() { @Override public StringBuilder call() { return new StringBuilder(); } }, new BiConsumer<StringBuilder, Integer>() { @Override public void accept(StringBuilder sb, Integer v) { if (sb.length() > 0) { sb.append("-"); } sb.append(v); } }).toFlowable().blockingLast().toString(); assertEquals("1-2-3", value); }
@Test public void testCollectorFailureDoesNotResultInTwoErrorEmissions() { try { final List<Throwable> list = new CopyOnWriteArrayList<Throwable>(); RxJavaPlugins.setErrorHandler(addToList(list)); final RuntimeException e1 = new RuntimeException(); final RuntimeException e2 = new RuntimeException(); Burst.items(1).error(e2) // .collect(callableListCreator(), biConsumerThrows(e1)) // .test() // .assertError(e1) // .assertNotComplete(); assertEquals(1, list.size()); assertEquals(e2, list.get(0).getCause()); } finally { RxJavaPlugins.reset(); } }
@Test public void testCollectorFailureDoesNotResultInTwoErrorEmissionsFlowable() { try { final List<Throwable> list = new CopyOnWriteArrayList<Throwable>(); RxJavaPlugins.setErrorHandler(addToList(list)); final RuntimeException e1 = new RuntimeException(); final RuntimeException e2 = new RuntimeException(); Burst.items(1).error(e2) // .collect(callableListCreator(), biConsumerThrows(e1)) .toFlowable() .test() // .assertError(e1) // .assertNotComplete(); assertEquals(1, list.size()); assertEquals(e2, list.get(0).getCause()); } finally { RxJavaPlugins.reset(); } }
@Test public void testFactoryFailureResultsInErrorEmissionFlowable() { final RuntimeException e = new RuntimeException(); Flowable.just(1).collect(new Callable<List<Integer>>() { @Override public List<Integer> call() throws Exception { throw e; } }, new BiConsumer<List<Integer>, Integer>() { @Override public void accept(List<Integer> list, Integer t) { list.add(t); } }) .test() .assertNoValues() .assertError(e) .assertNotComplete(); }
@Test public void testFactoryFailureResultsInErrorEmission() { final RuntimeException e = new RuntimeException(); Flowable.just(1).collect(new Callable<List<Integer>>() { @Override public List<Integer> call() throws Exception { throw e; } }, new BiConsumer<List<Integer>, Integer>() { @Override public void accept(List<Integer> list, Integer t) { list.add(t); } }) .test() .assertNoValues() .assertError(e) .assertNotComplete(); }
@Test public void testCollectorFailureDoesNotResultInErrorAndCompletedEmissions() { final RuntimeException e = new RuntimeException(); Burst.item(1).create() // .collect(callableListCreator(), biConsumerThrows(e)) // .test() // .assertError(e) // .assertNotComplete(); }
@Test public void testCollectorFailureDoesNotResultInErrorAndOnNextEmissions() { final RuntimeException e = new RuntimeException(); final AtomicBoolean added = new AtomicBoolean(); BiConsumer<Object, Integer> throwOnFirstOnly = new BiConsumer<Object, Integer>() { boolean once = true; @Override public void accept(Object o, Integer t) { if (once) { once = false; throw e; } else { added.set(true); } } }; Burst.items(1, 2).create() // .collect(callableListCreator(), throwOnFirstOnly)// .test() // .assertError(e) // .assertNoValues() // .assertNotComplete(); assertFalse(added.get()); }
/** * This uses the public API collect which uses scan under the covers. */ @Test public void testSeedFactoryFlowable() { Flowable<List<Integer>> f = Flowable.range(1, 10) .collect(new Callable<List<Integer>>() { @Override public List<Integer> call() { return new ArrayList<Integer>(); } }, new BiConsumer<List<Integer>, Integer>() { @Override public void accept(List<Integer> list, Integer t2) { list.add(t2); } }).toFlowable().takeLast(1); assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), f.blockingSingle()); assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), f.blockingSingle()); }
@Test public void testCollectorFailureDoesNotResultInErrorAndCompletedEmissionsFlowable() { final RuntimeException e = new RuntimeException(); Burst.item(1).create() // .collect(callableListCreator(), biConsumerThrows(e)) // .toFlowable() .test() // .assertError(e) // .assertNotComplete(); }
@Test public void testCollectorFailureDoesNotResultInErrorAndOnNextEmissionsFlowable() { final RuntimeException e = new RuntimeException(); final AtomicBoolean added = new AtomicBoolean(); BiConsumer<Object, Integer> throwOnFirstOnly = new BiConsumer<Object, Integer>() { boolean once = true; @Override public void accept(Object o, Integer t) { if (once) { once = false; throw e; } else { added.set(true); } } }; Burst.items(1, 2).create() // .collect(callableListCreator(), throwOnFirstOnly)// .toFlowable() .test() // .assertError(e) // .assertNoValues() // .assertNotComplete(); assertFalse(added.get()); }