Move option interface and default implementation to top-level classes.
[Sone.git] / src / test / java / net / pterodactylus / sone / utils / DefaultOptionTest.java
1 package net.pterodactylus.sone.utils;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.is;
5 import static org.hamcrest.Matchers.nullValue;
6
7 import javax.annotation.Nullable;
8
9 import net.pterodactylus.sone.utils.DefaultOption;
10
11 import com.google.common.base.Predicate;
12 import org.junit.Test;
13
14 /**
15  * Unit test for {@link DefaultOption}.
16  *
17  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
18  */
19 public class DefaultOptionTest {
20
21         private final Object defaultValue = new Object();
22         private final Object acceptedValue = new Object();
23         private final Predicate<Object> matchesAcceptedValue = new Predicate<Object>() {
24                 @Override
25                 public boolean apply(@Nullable Object object) {
26                         return acceptedValue.equals(object);
27                 }
28         };
29
30         @Test
31         public void defaultOptionReturnsDefaultValueWhenUnset() {
32                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue);
33                 assertThat(defaultOption.get(), is(defaultValue));
34         }
35
36         @Test
37         public void defaultOptionReturnsNullForRealWhenUnset() {
38                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue);
39                 assertThat(defaultOption.getReal(), nullValue());
40         }
41
42         @Test
43         public void defaultOptionWillReturnSetValue() {
44                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue);
45                 Object newValue = new Object();
46                 defaultOption.set(newValue);
47                 assertThat(defaultOption.get(), is(newValue));
48         }
49
50         @Test
51         public void defaultOptionWithValidatorAcceptsValidValues() {
52                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue);
53                 defaultOption.set(acceptedValue);
54                 assertThat(defaultOption.get(), is(acceptedValue));
55         }
56
57         @Test(expected = IllegalArgumentException.class)
58         public void defaultOptionWithValidatorRejectsInvalidValues() {
59                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue);
60                 defaultOption.set(new Object());
61         }
62
63         @Test
64         public void defaultOptionValidatesObjectsCorrectly() {
65                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue);
66                 assertThat(defaultOption.validate(acceptedValue), is(true));
67                 assertThat(defaultOption.validate(new Object()), is(false));
68         }
69
70         @Test
71         public void settingToNullWillRestoreDefaultValue() {
72                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue);
73                 defaultOption.set(null);
74                 assertThat(defaultOption.get(), is(defaultValue));
75         }
76
77         @Test
78         public void validateWithoutValidatorWillValidateNull() {
79                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue);
80                 assertThat(defaultOption.validate(null), is(true));
81         }
82
83         @Test
84         public void validateWithValidatorWillValidateNull() {
85                 DefaultOption<Object> defaultOption = new DefaultOption<Object>(defaultValue, matchesAcceptedValue);
86                 assertThat(defaultOption.validate(null), is(true));
87         }
88
89 }