@@ -2,6 +2,7 @@ package sc.plugin2025
2
2
3
3
import io.kotest.core.spec.style.WordSpec
4
4
import io.kotest.matchers.*
5
+ import sc.api.plugins.Team
5
6
import sc.helpers.shouldSerializeTo
6
7
7
8
class GameStateTest : WordSpec ({
@@ -13,31 +14,70 @@ class GameStateTest: WordSpec({
13
14
clone.currentPlayer.addCard(Card .EAT_SALAD )
14
15
state.currentPlayer.getCards().size shouldBe 0
15
16
}
17
+ val state = GameState (
18
+ Board (arrayOf(Field .START , Field .MARKET , Field .CARROTS , Field .SALAD , Field .HARE , Field .GOAL )),
19
+ lastMove = Advance (5, Card .EAT_SALAD ),
20
+ turn = 1,
21
+ players = listOf(
22
+ Hare (Team .TWO , cards = arrayListOf(Card .SWAP_CARROTS ), lastAction = Advance (5)),
23
+ Hare (Team .ONE , position = 3, lastAction = Card .EAT_SALAD )
24
+ )
25
+ )
26
+ " behave properly" {
27
+ state.currentTeam shouldBe Team .ONE
28
+ state.currentField shouldBe Field .SALAD
29
+ state.currentPlayer.team shouldBe Team .ONE
30
+ state.currentPlayer.lastAction shouldBe Card .EAT_SALAD
31
+ state.mayEatSalad() shouldBe true
32
+ state.currentPlayer.lastAction = EatSalad
33
+ state.mayEatSalad() shouldBe false
34
+ }
16
35
" produce nice XML" {
17
- GameState (
18
- Board (arrayOf(Field .START , Field .MARKET , Field .CARROTS , Field .HARE , Field .GOAL )),
19
- lastMove = Advance (5, Card .EAT_SALAD )
20
- ).apply {
21
- players.forEachIndexed { index, hare ->
22
- hare.addCard(Card .values()[index])
23
- hare.lastAction = if (index == 0) Card .EAT_SALAD else Advance (index)
24
- }
25
- } shouldSerializeTo """
26
- <state startTeam="ONE" turn="0">
36
+ Hare (Team .TWO , lastAction = EatSalad ) shouldSerializeTo """
37
+ <player team="TWO" position="0" salads="5" carrots="68">
38
+ <lastAction class="eatsalad"/>
39
+ <cards/>
40
+ </player>
41
+ """ .trimIndent()
42
+ Hare (Team .TWO , cards = arrayListOf(Card .HURRY_AHEAD )) shouldSerializeTo """
43
+ <player team="TWO" position="0" salads="5" carrots="68">
44
+ <cards>
45
+ <card>HURRY_AHEAD</card>
46
+ </cards>
47
+ </player>
48
+ """ .trimIndent()
49
+
50
+ Advance (5, Card .EAT_SALAD ) shouldSerializeTo """
51
+ <advance distance="5">
52
+ <card>EAT_SALAD</card>
53
+ </advance>
54
+ """ .trimIndent()
55
+
56
+ Board (arrayOf(Field .START )) shouldSerializeTo """
57
+ <board>
58
+ <field>START</field>
59
+ </board>
60
+ """ .trimIndent()
61
+
62
+ state shouldSerializeTo """
63
+ <state startTeam="TWO" turn="1">
27
64
<board>
28
65
<field>START</field>
29
66
<field>MARKET</field>
30
67
<field>CARROTS</field>
68
+ <field>SALAD</field>
31
69
<field>HARE</field>
32
70
<field>GOAL</field>
33
71
</board>
34
- <player team="ONE" position="0" salads="5" carrots="68">
35
- <lastAction class="card">EAT_SALAD</lastAction>
36
- <card>FALL_BACK</card>
37
- </player>
38
72
<player team="TWO" position="0" salads="5" carrots="68">
39
- <lastAction class="advance" distance="1"/>
40
- <card>HURRY_AHEAD</card>
73
+ <lastAction class="advance" distance="5"/>
74
+ <cards>
75
+ <card>SWAP_CARROTS</card>
76
+ </cards>
77
+ </player>
78
+ <player team="ONE" position="3" salads="5" carrots="68">
79
+ <lastAction class="card">EAT_SALAD</lastAction>
80
+ <cards/>
41
81
</player>
42
82
<lastMove class="advance" distance="5">
43
83
<card>EAT_SALAD</card>
0 commit comments