package org.codefx.libfx.nesting.listener; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import org.codefx.libfx.listener.handle.CreateListenerHandle; import org.codefx.libfx.nesting.Nesting; import org.codefx.libfx.nesting.testhelper.NestingAccess.EditableNesting; import org.junit.runner.RunWith; import com.nitorcreations.junit.runners.NestedRunner; /** * Tests the class {@link NestedChangeListenerBuilder}. */ @RunWith(NestedRunner.class) public class NestedChangeListenerBuilderTest { /** * Tests whether the builder behaves well. */ public static class Builder extends AbstractNestedChangeListenerBuilderTest { @Override protected <T> NestedChangeListenerBuilder<T, Property<T>> createBuilder() { Property<T> innerObservable = new SimpleObjectProperty<>(); EditableNesting<Property<T>> nesting = EditableNesting.createWithInnerObservable(innerObservable); return NestedChangeListenerBuilder.forNesting(nesting); } } /** * Tests whether the created listener handles behave well. */ public static class CreatedListenerHandles extends AbstractNestedChangeListenerHandleTest { @Override protected <T> NestedChangeListenerHandle<T> createNestedListenerHandle( Nesting<? extends ObservableValue<T>> nesting, ChangeListener<T> listener, CreateListenerHandle attachedOrDetached) { NestedChangeListenerBuilder<T, ? extends ObservableValue<T>>.Buildable builder = NestedChangeListenerBuilder .forNesting(nesting) .withListener(listener); if (attachedOrDetached == CreateListenerHandle.ATTACHED) return builder.buildAttached(); else if (attachedOrDetached == CreateListenerHandle.DETACHED) return builder.buildDetached(); else throw new IllegalArgumentException(); } } }