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