package org.reactfx; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import org.junit.Test; public class SuspendedWhenTest { @Test public void test() { Property<Integer> p = new SimpleObjectProperty<>(0); BooleanProperty suspended = new SimpleBooleanProperty(true); List<Integer> emitted = new ArrayList<>(); SuspendableEventStream<Integer> pausable = EventStreams.valuesOf(p).pausable(); Subscription sub = pausable.suspendedWhen(suspended).subscribe(emitted::add); // test that the stream started suspended assertEquals(Arrays.asList(), emitted); suspended.set(false); assertEquals(Arrays.asList(0), emitted); p.setValue(1); assertEquals(Arrays.asList(0, 1), emitted); suspended.set(true); p.setValue(2); p.setValue(3); p.setValue(4); assertEquals(Arrays.asList(0, 1), emitted); List<Integer> emitted2 = new ArrayList<>(); pausable.subscribe(emitted2::add); assertEquals(Arrays.asList(), emitted2); suspended.set(false); assertEquals(Arrays.asList(0, 1, 2, 3, 4), emitted); assertEquals(Arrays.asList(2, 3, 4), emitted2); suspended.set(true); p.setValue(5); p.setValue(6); assertEquals(Arrays.asList(2, 3, 4), emitted2); sub.unsubscribe(); // testing resume on unsubscribe assertEquals(Arrays.asList(0, 1, 2, 3, 4), emitted); assertEquals(Arrays.asList(2, 3, 4, 5, 6), emitted2); } }