package net.pterodactylus.sone.utils; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import javax.annotation.Nullable; import com.google.common.base.Predicate; import org.junit.Test; /** * Unit test for {@link DefaultOption}. * * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a> */ public class DefaultOptionTest { private final Object defaultValue = new Object(); private final Object acceptedValue = new Object(); private final Predicate<Object> matchesAcceptedValue = new Predicate<Object>() { @Override public boolean apply(@Nullable Object object) { return acceptedValue.equals(object); } }; @Test public void defaultOptionReturnsDefaultValueWhenUnset() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue); assertThat(defaultOption.get(), is(defaultValue)); } @Test public void defaultOptionReturnsNullForRealWhenUnset() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue); assertThat(defaultOption.getReal(), nullValue()); } @Test public void defaultOptionWillReturnSetValue() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue); Object newValue = new Object(); defaultOption.set(newValue); assertThat(defaultOption.get(), is(newValue)); } @Test public void defaultOptionWithValidatorAcceptsValidValues() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue); defaultOption.set(acceptedValue); assertThat(defaultOption.get(), is(acceptedValue)); } @Test(expected = IllegalArgumentException.class) public void defaultOptionWithValidatorRejectsInvalidValues() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue); defaultOption.set(new Object()); } @Test public void defaultOptionValidatesObjectsCorrectly() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue); assertThat(defaultOption.validate(acceptedValue), is(true)); assertThat(defaultOption.validate(new Object()), is(false)); } @Test public void settingToNullWillRestoreDefaultValue() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue); defaultOption.set(null); assertThat(defaultOption.get(), is(defaultValue)); } @Test public void validateWithoutValidatorWillValidateNull() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue); assertThat(defaultOption.validate(null), is(true)); } @Test public void validateWithValidatorWillValidateNull() { DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue); assertThat(defaultOption.validate(null), is(true)); } }