Skip to content

Commit c4fc1a9

Browse files
Update Gradle and Kotlin
1 parent 2944b64 commit c4fc1a9

File tree

4 files changed

+56
-62
lines changed

4 files changed

+56
-62
lines changed

build.gradle

+4-11
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
buildscript {
2-
ext.kotlin_version = '1.3.21'
2+
ext.kotlin_version = '2.0.0'
33

44
repositories {
55
mavenCentral()
66
jcenter()
77
}
88
dependencies {
99
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
10-
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.8.0'
10+
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.29.0'
1111
}
1212
}
1313

@@ -22,17 +22,10 @@ repositories {
2222
}
2323

2424
dependencies {
25-
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
25+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
2626

2727
testImplementation 'junit:junit:4.12'
2828
testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0'
2929
testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
30-
testImplementation 'org.assertj:assertj-core:3.11.1'
31-
}
32-
33-
compileKotlin {
34-
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
35-
}
36-
compileTestKotlin {
37-
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
30+
testImplementation "com.google.truth:truth:1.4.4"
3831
}

gradle/wrapper/gradle-wrapper.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-5.3.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip

src/main/kotlin/com/tinder/StateMachine.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class StateMachine<STATE : Any, EVENT : Any, SIDE_EFFECT : Any> private construc
66
private val graph: Graph<STATE, EVENT, SIDE_EFFECT>
77
) {
88

9-
private val stateRef = AtomicReference<STATE>(graph.initialState)
9+
private val stateRef = AtomicReference(graph.initialState)
1010

1111
val state: STATE
1212
get() = stateRef.get()

src/test/kotlin/com/tinder/StateMachineTest.kt

+50-49
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.tinder
22

3+
import com.google.common.truth.Truth.assertThat
34
import com.nhaarman.mockitokotlin2.mock
45
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
87
import org.junit.Test
98
import org.junit.experimental.runners.Enclosed
109
import org.junit.runner.RunWith
10+
import java.lang.IllegalArgumentException
11+
import java.lang.IllegalStateException
1112

1213
@RunWith(Enclosed::class)
1314
internal class StateMachineTest {
@@ -42,6 +43,7 @@ internal class StateMachineTest {
4243
SideEffect.LogFrozen -> logger.log(ON_FROZEN_MESSAGE)
4344
SideEffect.LogVaporized -> logger.log(ON_VAPORIZED_MESSAGE)
4445
SideEffect.LogCondensed -> logger.log(ON_CONDENSED_MESSAGE)
46+
null -> Unit
4547
}
4648
}
4749
}
@@ -127,23 +129,23 @@ internal class StateMachineTest {
127129
const val ON_CONDENSED_MESSAGE = "I condensed"
128130

129131
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()
133135
}
134136

135137
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()
140142
}
141143

142144
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()
147149
}
148150

149151
interface Logger {
@@ -336,22 +338,22 @@ internal class StateMachineTest {
336338

337339
sealed class State {
338340
data class Locked(val credit: Int) : State()
339-
object Unlocked : State()
341+
data object Unlocked : State()
340342
data class Broken(val oldState: State) : State()
341343
}
342344

343345
sealed class Event {
344346
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()
348350
}
349351

350352
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()
355357
}
356358
}
357359
}
@@ -502,10 +504,9 @@ internal class StateMachineTest {
502504
@Test
503505
fun transition_givenUndeclaredState_shouldThrowIllegalStateException() {
504506
// Then
505-
assertThatIllegalStateException()
506-
.isThrownBy {
507-
stateMachine.transition(Event.E4)
508-
}
507+
assertThrows(IllegalStateException::class.java) {
508+
stateMachine.transition(Event.E4)
509+
}
509510
}
510511
}
511512

@@ -514,31 +515,29 @@ internal class StateMachineTest {
514515
@Test
515516
fun create_givenNoInitialState_shouldThrowIllegalArgumentException() {
516517
// Then
517-
assertThatIllegalArgumentException().isThrownBy {
518+
assertThrows(IllegalArgumentException::class.java) {
518519
StateMachine.create<State, Event, SideEffect> {}
519520
}
520521
}
521522
}
522523

523524
private companion object {
524525
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()
529530
}
530531

531532
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()
536537
}
537538

538539
private sealed class SideEffect {
539-
object SE1 : SideEffect()
540-
object SE2 : SideEffect()
541-
object SE3 : SideEffect()
540+
data object SE1 : SideEffect()
542541
}
543542
}
544543
}
@@ -569,12 +568,12 @@ internal class StateMachineTest {
569568
transitionTo(STATE_D)
570569
}
571570
}
572-
state(STATE_B) {
573-
on(EVENT_3) {
571+
state<String>(STATE_B) {
572+
on<Int>(EVENT_3) {
574573
transitionTo(STATE_C, SIDE_EFFECT_1)
575574
}
576575
}
577-
state(STATE_C) {
576+
state<String>(STATE_C) {
578577
onEnter(onStateCEnterListener1)
579578
onEnter(onStateCEnterListener2)
580579
}
@@ -680,10 +679,9 @@ internal class StateMachineTest {
680679
@Test
681680
fun transition_givenUndeclaredState_shouldThrowIllegalStateException() {
682681
// Then
683-
assertThatIllegalStateException()
684-
.isThrownBy {
685-
stateMachine.transition(EVENT_4)
686-
}
682+
assertThrows(IllegalStateException::class.java) {
683+
stateMachine.transition(EVENT_4)
684+
}
687685
}
688686
}
689687

@@ -692,7 +690,7 @@ internal class StateMachineTest {
692690
@Test
693691
fun create_givenNoInitialState_shouldThrowIllegalArgumentException() {
694692
// Then
695-
assertThatIllegalArgumentException().isThrownBy {
693+
assertThrows(IllegalArgumentException::class.java) {
696694
StateMachine.create<String, Int, String> {}
697695
}
698696
}
@@ -713,9 +711,12 @@ internal class StateMachineTest {
713711
@Test
714712
fun transition_givenMissingDestinationStateDefinition_shouldThrowIllegalStateExceptionWithStateName() {
715713
// 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+
)
719720
}
720721
}
721722

0 commit comments

Comments
 (0)