-
-
Notifications
You must be signed in to change notification settings - Fork 332
/
AnswersTest.kt
112 lines (83 loc) · 2.76 KB
/
AnswersTest.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
@file:Suppress("UNUSED_PARAMETER")
package io.mockk.it
import io.mockk.*
import kotlin.test.Test
import kotlin.test.assertEquals
class AnswersTest {
class MockCls {
fun op(a: Int, b: Int, c: Int = 10, d: Int = 25, e: Int? = 55) = a + b + c + d
fun lambdaOp(a: Int, b: () -> Int) = a + b()
}
val spy = spyk(MockCls())
@Test
fun answerFirstArg() {
every { spy.op(any(), 5) } answers { if (firstArg<Int>() == 1) 1 else 2 }
assertEquals(1, spy.op(1, 5))
assertEquals(2, spy.op(2, 5))
}
@Test
fun answerSecondArg() {
every { spy.op(6, any()) } answers { if (secondArg<Int>() == 2) 3 else 4 }
assertEquals(3, spy.op(6, 2))
assertEquals(4, spy.op(6, 3))
}
@Test
fun answerThirdArg() {
every { spy.op(any(), 7, any()) } answers { if (thirdArg<Int>() == 9) 5 else 6 }
assertEquals(5, spy.op(2, 7, 9))
assertEquals(6, spy.op(3, 7, 10))
}
@Test
fun answerLastArg() {
every { spy.op(any(), 7, e = any()) } answers { if (lastArg<Int>() == 11) 7 else 8 }
assertEquals(7, spy.op(2, 7, e = 11))
assertEquals(8, spy.op(3, 7, e = 12))
}
@Test
fun answerNArgs() {
every { spy.op(any(), 1) } answers { nArgs }
assertEquals(5, spy.op(2, 1))
}
@Test
fun answerParamTypesCount() {
every { spy.op(any(), 2) } answers { method.paramTypes.size }
assertEquals(5, spy.op(2, 2))
}
@Test
fun answerCaptureList() {
val lstNonNull = mutableListOf<Int>()
every { spy.op(1, 2, d = capture(lstNonNull)) } answers { lstNonNull.captured() }
assertEquals(22, spy.op(1, 2, d = 22))
}
@Test
fun answerCaptureListNullable() {
val lst = mutableListOf<Int?>()
every { spy.op(3, 4, e = captureNullable(lst)) } answers { lst.captured() ?: 55 }
spy.op(3, 4, e = 1)
spy.op(3, 4, e = null)
spy.op(3, 4, e = 2)
spy.op(3, 4, e = 3)
assertEquals(listOf(1, null, 2, 3), lst)
}
@Test
fun answerCaptureSlot() {
val slot = slot<Int>()
every { spy.op(3, 4, d = capture(slot)) } answers { slot.captured }
assertEquals(44, spy.op(3, 4, d = 44))
}
@Test
fun answerCaptureLambda() {
val slot = slot<() -> Int>()
every { spy.lambdaOp(1, capture(slot)) } answers { 2 + slot.invoke() }
assertEquals(5, spy.lambdaOp(1, { 3 }))
verify { spy.lambdaOp(1, any()) }
}
@Test
fun answersNthArg() {
every { spy.lambdaOp(any(), any()) } returnsArgument 0
assertEquals(1, spy.lambdaOp(1) { 3 })
assertEquals(2, spy.lambdaOp(2) { 3 })
assertEquals(5, spy.lambdaOp(5) { 3 })
verify { spy.lambdaOp(1, any()) }
}
}