package com.github.davidmoten.rx.testing; import java.util.Arrays; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import junit.framework.TestCase; import junit.framework.TestSuite; import rx.Observable; import rx.functions.Action0; import rx.functions.Func1; public class TestingHelperCountTest extends TestCase { public static TestSuite suite() { return TestingHelper.function(COUNT) // test empty .name("testCountOfEmptyReturnsZero").fromEmpty().expect(0) // test error .name("testCountErrorReturnsError").fromError().expectError() // test error after some emission .name("testCountErrorAfterTwoEmissionsReturnsError").fromErrorAfter(5, 6) .expectError() // test non-empty count .name("testCountOfTwoReturnsTwo").from(5, 6).expect(2) // test single input .name("testCountOfOneReturnsOne").from(5).expect(1) // count many .name("testCountOfManyDoesNotGiveStackOverflow").from(Observable.range(1, 1000000)) .expect(1000000) // get test suites .testSuite(TestingHelperCountTest.class); } public void testDummy() { // just here to fool eclipse } public void testCountUnsubscribe() throws InterruptedException { final CountDownLatch latch = new CountDownLatch(1); Observable.from(Arrays.asList(1, 2)).doOnUnsubscribe(new Action0() { @Override public void call() { latch.countDown(); } }).count().subscribe(); assertTrue(latch.await(100, TimeUnit.MILLISECONDS)); } private static final Func1<Observable<Integer>, Observable<Integer>> COUNT = new Func1<Observable<Integer>, Observable<Integer>>() { @Override public Observable<Integer> call(Observable<Integer> o) { return o.count(); } }; }