Skip to content

Commit 7f75f2c

Browse files
committed
Use all dataState's dsl methods in tests
Update coverage ratio
1 parent 1d5b3d8 commit 7f75f2c

4 files changed

Lines changed: 178 additions & 5 deletions

File tree

tests/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@ dependencies {
4141
}
4242

4343
kover.reports.verify.rule {
44-
minBound(87)
44+
minBound(88)
4545
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*
2+
* Author: Mikhail Fedotov
3+
* Github: https://github.com/KStateMachine
4+
* Copyright (c) 2024.
5+
* All rights reserved.
6+
*/
7+
8+
package ru.nsk.kstatemachine.state
9+
10+
import io.kotest.core.spec.style.FreeSpec
11+
import io.kotest.matchers.shouldBe
12+
import ru.nsk.kstatemachine.CoroutineStarterType
13+
import ru.nsk.kstatemachine.createTestStateMachine
14+
import ru.nsk.kstatemachine.event.DataEvent
15+
import ru.nsk.kstatemachine.state.DataStateTestData.IntEvent
16+
17+
private object DataStateTestData {
18+
class IntEvent(override val data: Int) : DataEvent<Int>
19+
}
20+
21+
class DataStateTest : FreeSpec({
22+
CoroutineStarterType.entries.forEach { coroutineStarterType ->
23+
"$coroutineStarterType" - {
24+
"dataState" {
25+
lateinit var dataState: DataState<Int>
26+
createTestStateMachine(coroutineStarterType) {
27+
initialChoiceDataState { dataState }
28+
dataState = dataState<Int>(defaultData = 0)
29+
}
30+
dataState.data shouldBe 0
31+
}
32+
33+
"dataState scoped" {
34+
lateinit var dataState: DataState<Int>
35+
createTestStateMachine(coroutineStarterType) {
36+
initialChoiceDataState { dataState }
37+
dataState = dataState<Int>(defaultData = 0) {}
38+
}
39+
dataState.data shouldBe 0
40+
}
41+
42+
"initialDataState" {
43+
lateinit var dataState: DataState<Int>
44+
createTestStateMachine(coroutineStarterType) {
45+
dataState = initialDataState<Int>(defaultData = 1)
46+
}
47+
dataState.data shouldBe 1
48+
}
49+
50+
"initialDataState scoped" {
51+
lateinit var dataState: DataState<Int>
52+
createTestStateMachine(coroutineStarterType) {
53+
dataState = initialDataState<Int>(defaultData = 1) {}
54+
}
55+
dataState.data shouldBe 1
56+
}
57+
58+
"initialFinalDataState" {
59+
val machine = createTestStateMachine(coroutineStarterType) {
60+
initialFinalDataState<Int>(defaultData = 1)
61+
}
62+
machine.isFinished shouldBe true
63+
}
64+
65+
"initialFinalDataState scoped" {
66+
val machine = createTestStateMachine(coroutineStarterType) {
67+
initialFinalDataState<Int>(defaultData = 1) {}
68+
}
69+
machine.isFinished shouldBe true
70+
}
71+
72+
"finalDataState" {
73+
val machine = createTestStateMachine(coroutineStarterType) {
74+
val dataState = finalDataState<Int>(defaultData = 1)
75+
initialState {
76+
dataTransition<IntEvent, Int> { targetState = dataState }
77+
}
78+
}
79+
machine.processEvent(IntEvent(0))
80+
machine.isFinished shouldBe true
81+
}
82+
83+
"finalDataState scoped" {
84+
val machine = createTestStateMachine(coroutineStarterType) {
85+
val dataState = finalDataState<Int>(defaultData = 1) {}
86+
initialState {
87+
dataTransition<IntEvent, Int> { targetState = dataState }
88+
}
89+
}
90+
machine.processEvent(IntEvent(0))
91+
machine.isFinished shouldBe true
92+
}
93+
}
94+
}
95+
})

tests/src/commonTest/kotlin/ru/nsk/kstatemachine/state/MutableDataStateTest.kt

Lines changed: 80 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ import ru.nsk.kstatemachine.CoroutineStarterType
1414
import ru.nsk.kstatemachine.SwitchEvent
1515
import ru.nsk.kstatemachine.createTestStateMachine
1616
import ru.nsk.kstatemachine.event.DataEvent
17-
import ru.nsk.kstatemachine.state.MutableDataStateTestData.IdEvent
17+
import ru.nsk.kstatemachine.state.MutableDataStateTestData.IntEvent
1818

1919
private object MutableDataStateTestData {
20-
class IdEvent(override val data: Int) : DataEvent<Int>
20+
class IntEvent(override val data: Int) : DataEvent<Int>
2121
}
2222

2323
class MutableDataStateTest : FreeSpec({
@@ -27,14 +27,14 @@ class MutableDataStateTest : FreeSpec({
2727
lateinit var mutableDataState: MutableDataState<Int>
2828
val machine = createTestStateMachine(coroutineStarterType) {
2929
val state1 = initialState {
30-
dataTransitionOn<IdEvent, Int> { targetState = { mutableDataState } }
30+
dataTransitionOn<IntEvent, Int> { targetState = { mutableDataState } }
3131
}
3232
mutableDataState = mutableDataState<Int>("mutableDataState") {
3333
onEntry { data shouldBe 42 }
3434
transition<SwitchEvent> { targetState = state1 }
3535
}
3636
}
37-
machine.processEvent(IdEvent(42))
37+
machine.processEvent(IntEvent(42))
3838
mutableDataState.isActive shouldBe true
3939
mutableDataState.lastData shouldBe 42
4040
mutableDataState.data shouldBe 42
@@ -72,6 +72,82 @@ class MutableDataStateTest : FreeSpec({
7272
machine.processEvent(SwitchEvent)
7373
mutableState1.lastData shouldBe 2
7474
}
75+
76+
"mutableDataState" {
77+
lateinit var mutableDataState: MutableDataState<Int>
78+
createTestStateMachine(coroutineStarterType) {
79+
initialChoiceDataState { mutableDataState }
80+
mutableDataState = mutableDataState<Int>(defaultData = 0)
81+
}
82+
mutableDataState.data shouldBe 0
83+
}
84+
85+
"mutableDataState scoped" {
86+
lateinit var mutableDataState: MutableDataState<Int>
87+
createTestStateMachine(coroutineStarterType) {
88+
initialChoiceDataState { mutableDataState }
89+
mutableDataState = mutableDataState<Int>(defaultData = 0) {
90+
onEntry { setData(1) }
91+
}
92+
}
93+
mutableDataState.data shouldBe 1
94+
}
95+
96+
"initialMutableDataState" {
97+
lateinit var mutableDataState: MutableDataState<Int>
98+
createTestStateMachine(coroutineStarterType) {
99+
mutableDataState = initialMutableDataState<Int>(defaultData = 1)
100+
}
101+
mutableDataState.data shouldBe 1
102+
}
103+
104+
"initialMutableDataState scoped" {
105+
lateinit var mutableDataState: MutableDataState<Int>
106+
createTestStateMachine(coroutineStarterType) {
107+
mutableDataState = initialMutableDataState<Int>(defaultData = 1) {
108+
onEntry { setData(0) }
109+
}
110+
}
111+
mutableDataState.data shouldBe 0
112+
}
113+
114+
"initialFinalMutableDataState" {
115+
val machine = createTestStateMachine(coroutineStarterType) {
116+
initialFinalMutableDataState<Int>(defaultData = 1)
117+
}
118+
machine.isFinished shouldBe true
119+
}
120+
121+
"initialFinalMutableDataState scoped" {
122+
val machine = createTestStateMachine(coroutineStarterType) {
123+
initialFinalMutableDataState<Int>(defaultData = 1) {
124+
onEntry { setData(0) }
125+
}
126+
}
127+
machine.isFinished shouldBe true
128+
}
129+
130+
"finalMutableDataState" {
131+
val machine = createTestStateMachine(coroutineStarterType) {
132+
val dataState = finalMutableDataState<Int>(defaultData = 1)
133+
initialState {
134+
dataTransition<IntEvent, Int> { targetState = dataState }
135+
}
136+
}
137+
machine.processEvent(IntEvent(0))
138+
machine.isFinished shouldBe true
139+
}
140+
141+
"finalMutableDataState scoped" {
142+
val machine = createTestStateMachine(coroutineStarterType) {
143+
val dataState = finalMutableDataState<Int>(defaultData = 1) {}
144+
initialState {
145+
dataTransition<IntEvent, Int> { targetState = dataState }
146+
}
147+
}
148+
machine.processEvent(IntEvent(0))
149+
machine.isFinished shouldBe true
150+
}
75151
}
76152
}
77153
})

tests/src/commonTest/kotlin/ru/nsk/kstatemachine/visitors/export/ExportPlantUmlVisitorTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ class ExportPlantUmlVisitorTest : FreeSpec({
334334
"Mermaid export nested states" {
335335
val machine = makeNestedMachine(coroutineStarterType)
336336
machine.exportToMermaid() shouldBe MERMAID_NESTED_STATES_RESULT
337+
machine.exportToMermaidBlocking() shouldBe MERMAID_NESTED_STATES_RESULT // for coverage
337338
}
338339

339340
"plantUml export parallel states" {
@@ -384,6 +385,7 @@ class ExportPlantUmlVisitorTest : FreeSpec({
384385
}
385386

386387
machine.exportToPlantUml() shouldBe PLANTUML_MACHINE_PARALLEL_MODE_RESULT
388+
machine.exportToPlantUmlBlocking() shouldBe PLANTUML_MACHINE_PARALLEL_MODE_RESULT // for coverage
387389
}
388390

389391
"plantUml export empty machine with parallel mode" {

0 commit comments

Comments
 (0)