@Test public void oneWindowOnly() { AssertSubscriber<Flux<Integer>> ts = AssertSubscriber.create(); DirectProcessor<Integer> source = DirectProcessor.create(); DirectProcessor<Integer> openSelector = DirectProcessor.create(); DirectProcessor<Integer> closeSelectorFor1 = DirectProcessor.create(); DirectProcessor<Integer> closeSelectorOthers = DirectProcessor.create(); source.windowWhen(openSelector, v -> v == 1 ? closeSelectorFor1 : closeSelectorOthers) .subscribe(ts); openSelector.onNext(1); source.onNext(1); source.onNext(2); source.onNext(3); closeSelectorFor1.onComplete(); source.onNext(4); source.onComplete(); ts.assertValueCount(1) .assertNoError() .assertComplete(); expect(ts, 0, 1, 2, 3); Assert.assertFalse("source has subscribers?", source.hasDownstreams()); Assert.assertFalse("openSelector has subscribers?", openSelector.hasDownstreams()); Assert.assertFalse("closeSelectorFor1 has subscribers?", closeSelectorFor1.hasDownstreams()); Assert.assertFalse("closeSelectorOthers has subscribers?", closeSelectorOthers.hasDownstreams()); }
@Test public void normal() { AssertSubscriber<Flux<Integer>> ts = AssertSubscriber.create(); DirectProcessor<Integer> sp1 = DirectProcessor.create(); DirectProcessor<Integer> sp2 = DirectProcessor.create(); DirectProcessor<Integer> sp3 = DirectProcessor.create(); DirectProcessor<Integer> sp4 = DirectProcessor.create(); sp1.windowWhen(sp2, v -> v == 1 ? sp3 : sp4) .subscribe(ts); sp1.onNext(1); sp2.onNext(1); sp1.onNext(2); sp2.onNext(2); sp1.onNext(3); sp3.onNext(1); sp1.onNext(4); sp4.onNext(1); sp1.onComplete(); ts.assertValueCount(2) .assertNoError() .assertComplete(); expect(ts, 0, 2, 3); expect(ts, 1, 3, 4); Assert.assertFalse("sp1 has subscribers?", sp1.hasDownstreams()); Assert.assertFalse("sp2 has subscribers?", sp2.hasDownstreams()); Assert.assertFalse("sp3 has subscribers?", sp3.hasDownstreams()); Assert.assertFalse("sp4 has subscribers?", sp4.hasDownstreams()); }
@Test public void normalStarterEnds() { AssertSubscriber<Flux<Integer>> ts = AssertSubscriber.create(); DirectProcessor<Integer> source = DirectProcessor.create(); DirectProcessor<Integer> openSelector = DirectProcessor.create(); DirectProcessor<Integer> closeSelectorFor1 = DirectProcessor.create(); DirectProcessor<Integer> closeSelectorForOthers = DirectProcessor.create(); source.windowWhen(openSelector, v -> v == 1 ? closeSelectorFor1 : closeSelectorForOthers) .subscribe(ts); source.onNext(1); openSelector.onNext(1); source.onNext(2); openSelector.onNext(2); source.onNext(3); closeSelectorFor1.onNext(1); source.onNext(4); closeSelectorForOthers.onNext(1); openSelector.onComplete(); source.onComplete(); //TODO evaluate, should the open completing cause the source to lose subscriber? ts.assertValueCount(2) .assertNoError() .assertComplete(); expect(ts, 0, 2, 3); expect(ts, 1, 3, 4); Assert.assertFalse("openSelector has subscribers?", openSelector.hasDownstreams()); Assert.assertFalse("closeSelectorFor1 has subscribers?", closeSelectorFor1.hasDownstreams()); Assert.assertFalse("closeSelectorForOthers has subscribers?", closeSelectorForOthers.hasDownstreams()); Assert.assertFalse("source has subscribers?", source.hasDownstreams()); }