@@ -3,29 +3,39 @@ package sc.plugin2025
3
3
import io.kotest.core.spec.style.FunSpec
4
4
import io.kotest.matchers.*
5
5
import io.kotest.matchers.collections.*
6
+ import io.kotest.matchers.nulls.*
6
7
import sc.plugin2025.util.HuIConstants
7
8
8
9
class CardTest : FunSpec ({
9
10
context(Card .SWAP_CARROTS .name) {
10
11
val state = GameState ()
12
+ Card .SWAP_CARROTS .check(state) shouldBe null
13
+ state.currentPlayer.addCard(Card .SWAP_CARROTS )
14
+
15
+ val lastSalad = state.board.getPreviousField(Field .SALAD ).shouldNotBeNull()
16
+ lastSalad shouldBe HuIConstants .LAST_SALAD
17
+
11
18
test("allowed only before last salad") {
12
- Card .SWAP_CARROTS .check(state) shouldBe null
13
- val lastSalad = state.board.getPreviousField(Field .SALAD )
14
- lastSalad shouldBe HuIConstants .LAST_SALAD
15
- state.currentPlayer.position = lastSalad!!
19
+ state.currentPlayer.position = lastSalad
16
20
Card .SWAP_CARROTS .check(state) shouldBe HuIMoveMistake .CANNOT_PLAY_SWAP_CARROTS_BEYOND_LAST_SALAD
17
- state.currentPlayer.position = state.board.getPreviousField(Field .HARE , lastSalad)!!
21
+ }
22
+ test("generate correct moves") {
23
+ val previousHare = state.board.getPreviousField(Field .HARE , lastSalad).shouldNotBeNull()
24
+ state.currentPlayer.position = previousHare - 1
25
+ state.possibleCardMoves(1) shouldContainExactly listOf(Advance (1, Card .SWAP_CARROTS ))
26
+ state.currentPlayer.position = previousHare
18
27
Card .SWAP_CARROTS .check(state) shouldBe null
19
- state.currentPlayer.addCard(Card .SWAP_CARROTS )
20
28
state.nextCards() shouldContainExactly listOf(arrayOf(Card .SWAP_CARROTS ))
29
+
30
+ val nextHare = state.board.getNextField(Field .HARE , previousHare).shouldNotBeNull()
31
+ state.possibleCardMoves(nextHare - previousHare).shouldBeEmpty()
32
+
21
33
state.otherPlayer.position = lastSalad
22
34
Card .SWAP_CARROTS .check(state) shouldBe HuIMoveMistake .CANNOT_PLAY_SWAP_CARROTS_BEYOND_LAST_SALAD
23
35
state.nextCards().shouldBeEmpty()
24
36
}
25
- state.currentPlayer.addCard(Card .SWAP_CARROTS )
26
37
test("not repeatable") {
27
- Card .SWAP_CARROTS .check(state) shouldBe null
28
- state.currentPlayer.position = state.board.getNextField(Field .HARE )!! - 1
38
+ state.currentPlayer.position = state.board.getNextField(Field .HARE ).shouldNotBeNull() - 1
29
39
state.performMoveDirectly(Advance (1, Card .SWAP_CARROTS ))
30
40
Card .SWAP_CARROTS .check(state) shouldBe HuIMoveMistake .CANNOT_PLAY_SWAP_CARROTS_ALREADY_PLAYED
31
41
state.performMoveDirectly(state.getSensibleMoves().first())
0 commit comments