-
-
Notifications
You must be signed in to change notification settings - Fork 331
/
SealedInterfaceTest.kt
67 lines (47 loc) · 1.44 KB
/
SealedInterfaceTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package io.mockk.it
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.condition.DisabledForJreRange
import org.junit.jupiter.api.condition.JRE
import kotlin.test.Test
import kotlin.test.assertEquals
class SealedInterfaceTest {
@Test
fun serviceReturnsSealedClassImpl() {
val factory = mockk<Factory> {
every { create() } returns Leaf(1)
}
val result = factory.create()
assertEquals(Leaf(1), result)
}
@Test
fun serviceAnswersSealedClassImpl() {
val factory = mockk<Factory> {
every { create() } answers { Leaf(1) }
}
val result = factory.create()
assertEquals(Leaf(1), result)
}
@Test
fun serviceTakesSealedInterfaceAsInput() {
val formattedNode = "Formatted node"
val factory = mockk<Factory> {
every { format(any()) } answers { formattedNode }
}
val result = factory.format(Root(0))
assertEquals(formattedNode, result)
}
companion object {
sealed interface Node
data class Root(val id: Int) : Node
data class Leaf(val id: Int) : Node
interface Factory {
fun create(): Node
fun format(node: Node): String
}
class FactoryImpl : Factory {
override fun create(): Node = Root(0)
override fun format(node: Node): String = node.toString()
}
}
}