1
1
package com.tinder
2
2
3
+ import com.google.common.truth.Truth.assertThat
3
4
import com.nhaarman.mockitokotlin2.mock
4
5
import com.nhaarman.mockitokotlin2.then
5
- import org.assertj.core.api.Assertions.assertThat
6
- import org.assertj.core.api.Assertions.assertThatIllegalArgumentException
7
- import org.assertj.core.api.Assertions.assertThatIllegalStateException
6
+ import org.junit.Assert.assertThrows
8
7
import org.junit.Test
9
8
import org.junit.experimental.runners.Enclosed
10
9
import org.junit.runner.RunWith
10
+ import java.lang.IllegalArgumentException
11
+ import java.lang.IllegalStateException
11
12
12
13
@RunWith(Enclosed ::class )
13
14
internal class StateMachineTest {
@@ -42,6 +43,7 @@ internal class StateMachineTest {
42
43
SideEffect .LogFrozen -> logger.log(ON_FROZEN_MESSAGE )
43
44
SideEffect .LogVaporized -> logger.log(ON_VAPORIZED_MESSAGE )
44
45
SideEffect .LogCondensed -> logger.log(ON_CONDENSED_MESSAGE )
46
+ null -> Unit
45
47
}
46
48
}
47
49
}
@@ -127,23 +129,23 @@ internal class StateMachineTest {
127
129
const val ON_CONDENSED_MESSAGE = " I condensed"
128
130
129
131
sealed class State {
130
- object Solid : State()
131
- object Liquid : State()
132
- object Gas : State()
132
+ data object Solid : State ()
133
+ data object Liquid : State ()
134
+ data object Gas : State ()
133
135
}
134
136
135
137
sealed class Event {
136
- object OnMelted : Event()
137
- object OnFrozen : Event()
138
- object OnVaporized : Event()
139
- object OnCondensed : Event()
138
+ data object OnMelted : Event ()
139
+ data object OnFrozen : Event ()
140
+ data object OnVaporized : Event ()
141
+ data object OnCondensed : Event ()
140
142
}
141
143
142
144
sealed class SideEffect {
143
- object LogMelted : SideEffect()
144
- object LogFrozen : SideEffect()
145
- object LogVaporized : SideEffect()
146
- object LogCondensed : SideEffect()
145
+ data object LogMelted : SideEffect ()
146
+ data object LogFrozen : SideEffect ()
147
+ data object LogVaporized : SideEffect ()
148
+ data object LogCondensed : SideEffect ()
147
149
}
148
150
149
151
interface Logger {
@@ -336,22 +338,22 @@ internal class StateMachineTest {
336
338
337
339
sealed class State {
338
340
data class Locked (val credit : Int ) : State()
339
- object Unlocked : State()
341
+ data object Unlocked : State ()
340
342
data class Broken (val oldState : State ) : State()
341
343
}
342
344
343
345
sealed class Event {
344
346
data class InsertCoin (val value : Int ) : Event()
345
- object AdmitPerson : Event()
346
- object MachineDidFail : Event()
347
- object MachineRepairDidComplete : Event()
347
+ data object AdmitPerson : Event ()
348
+ data object MachineDidFail : Event ()
349
+ data object MachineRepairDidComplete : Event ()
348
350
}
349
351
350
352
sealed class Command {
351
- object SoundAlarm : Command()
352
- object CloseDoors : Command()
353
- object OpenDoors : Command()
354
- object OrderRepair : Command()
353
+ data object SoundAlarm : Command ()
354
+ data object CloseDoors : Command ()
355
+ data object OpenDoors : Command ()
356
+ data object OrderRepair : Command ()
355
357
}
356
358
}
357
359
}
@@ -502,10 +504,9 @@ internal class StateMachineTest {
502
504
@Test
503
505
fun transition_givenUndeclaredState_shouldThrowIllegalStateException () {
504
506
// Then
505
- assertThatIllegalStateException()
506
- .isThrownBy {
507
- stateMachine.transition(Event .E4 )
508
- }
507
+ assertThrows(IllegalStateException ::class .java) {
508
+ stateMachine.transition(Event .E4 )
509
+ }
509
510
}
510
511
}
511
512
@@ -514,31 +515,29 @@ internal class StateMachineTest {
514
515
@Test
515
516
fun create_givenNoInitialState_shouldThrowIllegalArgumentException () {
516
517
// Then
517
- assertThatIllegalArgumentException().isThrownBy {
518
+ assertThrows( IllegalArgumentException :: class .java) {
518
519
StateMachine .create<State , Event , SideEffect > {}
519
520
}
520
521
}
521
522
}
522
523
523
524
private companion object {
524
525
private sealed class State {
525
- object A : State()
526
- object B : State()
527
- object C : State()
528
- object D : State()
526
+ data object A : State ()
527
+ data object B : State ()
528
+ data object C : State ()
529
+ data object D : State ()
529
530
}
530
531
531
532
private sealed class Event {
532
- object E1 : Event()
533
- object E2 : Event()
534
- object E3 : Event()
535
- object E4 : Event()
533
+ data object E1 : Event ()
534
+ data object E2 : Event ()
535
+ data object E3 : Event ()
536
+ data object E4 : Event ()
536
537
}
537
538
538
539
private sealed class SideEffect {
539
- object SE1 : SideEffect()
540
- object SE2 : SideEffect()
541
- object SE3 : SideEffect()
540
+ data object SE1 : SideEffect ()
542
541
}
543
542
}
544
543
}
@@ -569,12 +568,12 @@ internal class StateMachineTest {
569
568
transitionTo(STATE_D )
570
569
}
571
570
}
572
- state(STATE_B ) {
573
- on(EVENT_3 ) {
571
+ state< String > (STATE_B ) {
572
+ on< Int > (EVENT_3 ) {
574
573
transitionTo(STATE_C , SIDE_EFFECT_1 )
575
574
}
576
575
}
577
- state(STATE_C ) {
576
+ state< String > (STATE_C ) {
578
577
onEnter(onStateCEnterListener1)
579
578
onEnter(onStateCEnterListener2)
580
579
}
@@ -680,10 +679,9 @@ internal class StateMachineTest {
680
679
@Test
681
680
fun transition_givenUndeclaredState_shouldThrowIllegalStateException () {
682
681
// Then
683
- assertThatIllegalStateException()
684
- .isThrownBy {
685
- stateMachine.transition(EVENT_4 )
686
- }
682
+ assertThrows(IllegalStateException ::class .java) {
683
+ stateMachine.transition(EVENT_4 )
684
+ }
687
685
}
688
686
}
689
687
@@ -692,7 +690,7 @@ internal class StateMachineTest {
692
690
@Test
693
691
fun create_givenNoInitialState_shouldThrowIllegalArgumentException () {
694
692
// Then
695
- assertThatIllegalArgumentException().isThrownBy {
693
+ assertThrows( IllegalArgumentException :: class .java) {
696
694
StateMachine .create<String , Int , String > {}
697
695
}
698
696
}
@@ -713,9 +711,12 @@ internal class StateMachineTest {
713
711
@Test
714
712
fun transition_givenMissingDestinationStateDefinition_shouldThrowIllegalStateExceptionWithStateName () {
715
713
// Then
716
- assertThatIllegalStateException()
717
- .isThrownBy { stateMachine.transition(EVENT_1 ) }
718
- .withMessage(" Missing definition for state ${STATE_B .javaClass.simpleName} !" )
714
+ val exception = assertThrows(IllegalStateException ::class .java) {
715
+ stateMachine.transition(EVENT_1 )
716
+ }
717
+ assertThat(exception.message).isEqualTo(
718
+ " Missing definition for state ${STATE_B .javaClass.simpleName} !"
719
+ )
719
720
}
720
721
}
721
722
0 commit comments