@@ -201,7 +201,7 @@ class TypesafeTransitionTest : StringSpec({
201
201
state2.data shouldBe id
202
202
}
203
203
204
- " target-less data transition negative" {
204
+ " target-less data transition inside nonDataState negative" {
205
205
shouldThrow<IllegalArgumentException > {
206
206
createTestStateMachine(coroutineStarterType) {
207
207
initialState("state1") {
@@ -211,7 +211,34 @@ class TypesafeTransitionTest : StringSpec({
211
211
}
212
212
}
213
213
214
- " target-less transition in data state" {
214
+ " create self targeted data transition in DataState" {
215
+ createTestStateMachine(coroutineStarterType) {
216
+ initialDataState<Int >("state1", 42) {
217
+ dataTransition<IdEvent , Int >(targetState = this)
218
+ }
219
+ }
220
+ }
221
+
222
+ " create self targeted data transition in DataState via builder" {
223
+ createTestStateMachine(coroutineStarterType) {
224
+ initialDataState<Int >("state1", 42) {
225
+ dataTransition<IdEvent , Int > {
226
+ targetState = this@initialDataState
227
+ }
228
+ }
229
+ }
230
+ }
231
+
232
+ " create target-less data transition in DataState" {
233
+ createTestStateMachine(coroutineStarterType) {
234
+ initialDataState<Int >("state1", 42) {
235
+ // this method is only available for DataState
236
+ dataTransition<IdEvent , Int >()
237
+ }
238
+ }
239
+ }
240
+
241
+ " simple target-less transition in data state" {
215
242
val callbacks = mockkCallbacks()
216
243
217
244
val machine = createTestStateMachine(coroutineStarterType) {
@@ -232,19 +259,33 @@ class TypesafeTransitionTest : StringSpec({
232
259
verify { callbacks.onTransitionTriggered(SwitchEvent ) }
233
260
}
234
261
235
- " self targeted transition in data state" {
236
- shouldThrow<IllegalArgumentException > {
237
- createTestStateMachine(coroutineStarterType) {
238
- initialState("state1")
262
+ " self targeted LOCAL transition in data state, does not update data value" {
263
+ lateinit var dataState : DataState <Int >
264
+ val machine = createTestStateMachine(coroutineStarterType) {
265
+ dataState = initialDataState("state1", defaultData = 1) {
266
+ dataTransition<IdEvent , Int >(targetState = this)
267
+ }
268
+ }
239
269
240
- dataState("state2") {
241
- dataTransition<IdEvent , Int >(targetState = this)
242
- }
270
+ dataState.data shouldBe 1
271
+ machine.processEvent(IdEvent (2))
272
+ dataState.data shouldBe 1
273
+ }
274
+
275
+ " self targeted EXTERNAL transition in data state updates data value" {
276
+ lateinit var dataState : DataState <Int >
277
+ val machine = createTestStateMachine(coroutineStarterType) {
278
+ dataState = initialDataState("state1", defaultData = 1) {
279
+ dataTransition<IdEvent , Int >(targetState = this, type = TransitionType .EXTERNAL )
243
280
}
244
281
}
282
+
283
+ dataState.data shouldBe 1
284
+ machine.processEvent(IdEvent (2))
285
+ dataState.data shouldBe 2
245
286
}
246
287
247
- " self targeted transitionOn() does not update data, cannot throw on construction " {
288
+ " self targeted LOCAL transitionOn() does not update data" {
248
289
lateinit var dataState : DataState <Int >
249
290
250
291
val machine = createTestStateMachine(coroutineStarterType) {
0 commit comments