package org.codefx.libfx.nesting; import static org.junit.Assert.fail; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import org.codefx.libfx.nesting.testhelper.SomeValue; import org.junit.runner.RunWith; import com.nitorcreations.junit.runners.NestedRunner; /** * Tests the {@link Nesting} implementation {@link ShallowNesting}. */ @RunWith(NestedRunner.class) public class ShallowNestingTest { /** * Tests a {@link ShallowNesting} based on an {@link Observable}. */ public static class OnObservable extends AbstractShallowNestingTest<Observable> { @Override protected Observable createNewNestingHierarchy() { /* * To return an implementation of the 'Observable' interface which does not also implement other interfaces, * create an anonymous class. It is assumed that listeners are neither added nor removed. */ return new Observable() { @Override public void addListener(InvalidationListener arg0) { fail(); } @Override public void removeListener(InvalidationListener arg0) { fail(); } }; } } /** * Tests a {@link ShallowNesting} based on an {@link ObservableValue}. */ public static class OnObservableValue extends AbstractShallowNestingTest<ObservableValue<SomeValue>> { @Override protected ObservableValue<SomeValue> createNewNestingHierarchy() { final SomeValue someValue = new SomeValue(); /* * To return an implementation of the 'ObservableValue' interface which does not also implement other * interfaces, create an anonymous class. It is assumed that listeners are neither added nor removed. */ return new ObservableValue<SomeValue>() { @Override public void addListener(InvalidationListener listener) { fail(); } @Override public void removeListener(InvalidationListener listener) { fail(); } @Override public void addListener(ChangeListener<? super SomeValue> listener) { fail(); } @Override public void removeListener(ChangeListener<? super SomeValue> listener) { fail(); } @Override public SomeValue getValue() { return someValue; } }; } } /** * Tests a {@link ShallowNesting} based on a {@link Property}. */ public static class OnProperty extends AbstractShallowNestingTest<Property<SomeValue>> { @Override protected Property<SomeValue> createNewNestingHierarchy() { return new SimpleObjectProperty<SomeValue>(new SomeValue()); } } }