f7f4a491776150c7b7f8e919eaae50e1569e7041
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / utils / DefaultOptionTest.kt
1 package net.pterodactylus.sone.utils
2
3 import com.google.common.base.Predicate
4 import org.hamcrest.MatcherAssert.assertThat
5 import org.hamcrest.Matchers.equalTo
6 import org.hamcrest.Matchers.nullValue
7 import org.hamcrest.Matchers.sameInstance
8 import org.junit.Test
9
10 /**
11  * Unit test for [DefaultOption].
12  */
13 class DefaultOptionTest {
14
15         private val defaultValue = Any()
16         private val acceptedValue = Any()
17         private val matchesAcceptedValue = Predicate<Any?> { it == acceptedValue }
18
19         @Test
20         fun `default option returns default value when unset`() {
21                 val defaultOption = DefaultOption(defaultValue)
22                 assertThat(defaultOption.get(), sameInstance(defaultValue))
23         }
24
25         @Test
26         fun `default option returns null for real when unset`() {
27                 val defaultOption = DefaultOption(defaultValue)
28                 assertThat(defaultOption.real, nullValue())
29         }
30
31         @Test
32         fun `default option will return set value`() {
33                 val defaultOption = DefaultOption(defaultValue)
34                 val newValue = Any()
35                 defaultOption.set(newValue)
36                 assertThat(defaultOption.get(), sameInstance(newValue))
37         }
38
39         @Test
40         fun `default option with validator accepts valid values`() {
41                 val defaultOption = DefaultOption(defaultValue, matchesAcceptedValue)
42                 defaultOption.set(acceptedValue)
43                 assertThat(defaultOption.get(), sameInstance(acceptedValue))
44         }
45
46         @Test(expected = IllegalArgumentException::class)
47         fun `default option with validator rejects invalid values`() {
48                 val defaultOption = DefaultOption(defaultValue, matchesAcceptedValue)
49                 defaultOption.set(Any())
50         }
51
52         @Test
53         fun `default option validates objects correctly`() {
54                 val defaultOption = DefaultOption(defaultValue, matchesAcceptedValue)
55                 assertThat(defaultOption.validate(acceptedValue), equalTo(true))
56                 assertThat(defaultOption.validate(Any()), equalTo(false))
57         }
58
59         @Test
60         fun `setting to null will restore default value`() {
61                 val defaultOption = DefaultOption(defaultValue)
62                 defaultOption.set(null)
63                 assertThat(defaultOption.get(), sameInstance(defaultValue))
64         }
65
66         @Test
67         fun `validate without validator will validate null`() {
68                 val defaultOption = DefaultOption(defaultValue)
69                 assertThat(defaultOption.validate(null), equalTo(true))
70         }
71
72         @Test
73         fun `validate with validator will validate null`() {
74                 val defaultOption = DefaultOption(defaultValue, matchesAcceptedValue)
75                 assertThat(defaultOption.validate(null), equalTo(true))
76         }
77
78 }