This repository has been archived by the owner on Feb 24, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
GetterTest.kt
62 lines (53 loc) · 1.73 KB
/
GetterTest.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
package arrow.optics
import arrow.core.test.UnitSpec
import arrow.core.test.generators.functionAToB
import arrow.core.toT
import arrow.mtl.State
import arrow.mtl.map
import arrow.mtl.run
import arrow.mtl.runId
import arrow.optics.mtl.ask
import arrow.optics.mtl.asks
import arrow.optics.mtl.extract
import arrow.optics.mtl.extractMap
import arrow.optics.mtl.toReader
import arrow.optics.mtl.toState
import io.kotlintest.properties.Gen
import io.kotlintest.properties.forAll
class GetterTest : UnitSpec() {
init {
"Asking for the focus in a Reader" {
forAll(genToken) { token: Token ->
tokenGetter.ask().runId(token) == token.value
}
}
"toReader is an alias for ask" {
forAll(genToken) { token: Token ->
tokenGetter.ask().runId(token) == tokenLens.toReader().runId(token)
}
}
"Asks with f is the same as applying f to the focus of the lens" {
forAll(genToken, Gen.functionAToB<String, String>(Gen.string())) { token, f ->
tokenGetter.asks(f).runId(token) == f(token.value)
}
}
"Extract should extract the focus from the state" {
forAll(genToken) { generatedToken ->
tokenGetter.extract().run(generatedToken) ==
State { token: Token ->
token toT tokenGetter.get(token)
}.run(generatedToken)
}
}
"toState should be an alias to extract" {
forAll(genToken) { token ->
tokenGetter.toState().run(token) == tokenGetter.extract().run(token)
}
}
"extractMap with f should be same as extract and map" {
forAll(genToken, Gen.functionAToB<String, String>(Gen.string())) { token, f ->
tokenGetter.extractMap(f).run(token) == tokenGetter.extract().map(f).run(token)
}
}
}
}