ps.window(new Callable<Observable<Integer>>() { boolean once; @Override
@Test public void reentrant() { final Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { super.onNext(t); if (t == 1) { ps.onNext(2); ps.onComplete(); } } }; ps.window(BehaviorSubject.createDefault(1)) .flatMap(new Function<Observable<Integer>, ObservableSource<Integer>>() { @Override public ObservableSource<Integer> apply(Observable<Integer> v) throws Exception { return v; } }) .subscribe(to); ps.onNext(1); to .awaitDone(1, TimeUnit.SECONDS) .assertResult(1, 2); }
@Test public void periodicWindowCompletionBounded() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, 5, false) .test(); scheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS); to.assertValueCount(21) .assertNoErrors() .assertNotComplete(); }
@Test public void periodicWindowCompletionRestartTimer() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, Long.MAX_VALUE, true) .test(); scheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS); to.assertValueCount(21) .assertNoErrors() .assertNotComplete(); }
@Test public void periodicWindowCompletionRestartTimerBounded() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, 5, true) .test(); scheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS); to.assertValueCount(21) .assertNoErrors() .assertNotComplete(); }
@Test public void periodicWindowCompletion() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, Long.MAX_VALUE, false) .test(); scheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS); to.assertValueCount(21) .assertNoErrors() .assertNotComplete(); }
@Test public void exactBoundedReentrant2() { TestScheduler scheduler = new TestScheduler(); final Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { super.onNext(t); if (t == 1) { ps.onNext(2); ps.onComplete(); } } }; ps.window(1, TimeUnit.MILLISECONDS, scheduler, 2, true) .flatMap(new Function<Observable<Integer>, ObservableSource<Integer>>() { @Override public ObservableSource<Integer> apply(Observable<Integer> v) throws Exception { return v; } }) .subscribe(to); ps.onNext(1); to .awaitDone(1, TimeUnit.SECONDS) .assertResult(1, 2); }
@Test public void skipReentrant() { TestScheduler scheduler = new TestScheduler(); final Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { super.onNext(t); if (t == 1) { ps.onNext(2); ps.onComplete(); } } }; ps.window(1, 2, TimeUnit.MILLISECONDS, scheduler) .flatMap(new Function<Observable<Integer>, ObservableSource<Integer>>() { @Override public ObservableSource<Integer> apply(Observable<Integer> v) throws Exception { return v; } }) .subscribe(to); ps.onNext(1); to .awaitDone(1, TimeUnit.SECONDS) .assertResult(1, 2); }
@Test public void exactUnboundedReentrant() { TestScheduler scheduler = new TestScheduler(); final Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { super.onNext(t); if (t == 1) { ps.onNext(2); ps.onComplete(); } } }; ps.window(1, TimeUnit.MILLISECONDS, scheduler) .flatMap(new Function<Observable<Integer>, ObservableSource<Integer>>() { @Override public ObservableSource<Integer> apply(Observable<Integer> v) throws Exception { return v; } }) .subscribe(to); ps.onNext(1); to .awaitDone(1, TimeUnit.SECONDS) .assertResult(1, 2); }
@Test public void exactBoundedReentrant() { TestScheduler scheduler = new TestScheduler(); final Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { super.onNext(t); if (t == 1) { ps.onNext(2); ps.onComplete(); } } }; ps.window(1, TimeUnit.MILLISECONDS, scheduler, 10, true) .flatMap(new Function<Observable<Integer>, ObservableSource<Integer>>() { @Override public ObservableSource<Integer> apply(Observable<Integer> v) throws Exception { return v; } }) .subscribe(to); ps.onNext(1); to .awaitDone(1, TimeUnit.SECONDS) .assertResult(1, 2); }
@Test public void sizeTimeTimeout() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, 100) .test() .assertValueCount(1); scheduler.advanceTimeBy(5, TimeUnit.MILLISECONDS); to.assertValueCount(2) .assertNoErrors() .assertNotComplete(); to.values().get(0).test().assertResult(); }
@Test public void reentrant() { final Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Integer> to = new TestObserver<Integer>() { @Override public void onNext(Integer t) { super.onNext(t); if (t == 1) { ps.onNext(2); ps.onComplete(); } } }; ps.window(BehaviorSubject.createDefault(1), Functions.justFunction(Observable.never())) .flatMap(new Function<Observable<Integer>, ObservableSource<Integer>>() { @Override public ObservableSource<Integer> apply(Observable<Integer> v) throws Exception { return v; } }) .subscribe(to); ps.onNext(1); to .awaitDone(1, TimeUnit.SECONDS) .assertResult(1, 2); }
@Test public void periodicWindowCompletionRestartTimerBoundedSomeData() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, 2, true) .test(); ps.onNext(1); ps.onNext(2); scheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS); to.assertValueCount(22) .assertNoErrors() .assertNotComplete(); }
@Test public void countRestartsOnTimeTick() { TestScheduler scheduler = new TestScheduler(); Subject<Integer> ps = PublishSubject.<Integer>create(); TestObserver<Observable<Integer>> to = ps.window(5, TimeUnit.MILLISECONDS, scheduler, 5, true) .test(); // window #1 ps.onNext(1); ps.onNext(2); scheduler.advanceTimeBy(5, TimeUnit.MILLISECONDS); // window #2 ps.onNext(3); ps.onNext(4); ps.onNext(5); ps.onNext(6); to.assertValueCount(2) .assertNoErrors() .assertNotComplete(); } }