Skip to content

Commit 31457d9

Browse files
committed
refactor(plugin25): test GameResult
1 parent cd615e6 commit 31457d9

File tree

3 files changed

+161
-6
lines changed

3 files changed

+161
-6
lines changed

plugin2025/src/main/kotlin/sc/plugin2025/util/GamePlugin.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class GamePlugin: IGamePlugin<Move> {
2222
val scoreDefinition: ScoreDefinition =
2323
ScoreDefinition(arrayOf(
2424
ScoreFragment("Siegpunkte", WinReason("%s hat gewonnen"), ScoreAggregation.SUM),
25-
ScoreFragment("Feld", HuIWinReason.DIFFERING_SCORES, ScoreAggregation.AVERAGE),
25+
ScoreFragment("Feldnummer", HuIWinReason.DIFFERING_SCORES, ScoreAggregation.AVERAGE),
2626
ScoreFragment("Karotten", HuIWinReason.DIFFERING_CARROTS, ScoreAggregation.AVERAGE),
2727
))
2828
}

plugin2025/src/test/kotlin/sc/Util.kt

-5
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package sc.plugin2025
2+
3+
import io.kotest.core.spec.style.WordSpec
4+
import sc.framework.plugins.TwoPlayerGame
5+
import sc.helpers.shouldSerializeTo
6+
import sc.plugin2025.util.GamePlugin
7+
import sc.shared.InvalidMoveException
8+
import sc.shared.Violation
9+
10+
class GameResultTest: WordSpec({
11+
"Result XML" should {
12+
val game = TwoPlayerGame(GamePlugin(), GameState())
13+
"work when empty" {
14+
game.getResult() shouldSerializeTo """
15+
<result>
16+
<definition>
17+
<fragment name="Siegpunkte">
18+
<aggregation>SUM</aggregation>
19+
<relevantForRanking>true</relevantForRanking>
20+
</fragment>
21+
<fragment name="Feldnummer">
22+
<aggregation>AVERAGE</aggregation>
23+
<relevantForRanking>true</relevantForRanking>
24+
</fragment>
25+
<fragment name="Karotten">
26+
<aggregation>AVERAGE</aggregation>
27+
<relevantForRanking>true</relevantForRanking>
28+
</fragment>
29+
</definition>
30+
<scores/>
31+
<winner regular="true" reason="Beide Teams sind gleichauf"/>
32+
</result>
33+
""".trimIndent()
34+
}
35+
game.onPlayerJoined()
36+
game.onPlayerJoined()
37+
"work with tie result" {
38+
game.getResult() shouldSerializeTo """
39+
<result>
40+
<definition>
41+
<fragment name="Siegpunkte">
42+
<aggregation>SUM</aggregation>
43+
<relevantForRanking>true</relevantForRanking>
44+
</fragment>
45+
<fragment name="Feldnummer">
46+
<aggregation>AVERAGE</aggregation>
47+
<relevantForRanking>true</relevantForRanking>
48+
</fragment>
49+
<fragment name="Karotten">
50+
<aggregation>AVERAGE</aggregation>
51+
<relevantForRanking>true</relevantForRanking>
52+
</fragment>
53+
</definition>
54+
<scores>
55+
<entry>
56+
<player team="ONE"/>
57+
<score>
58+
<part>1</part>
59+
<part>0</part>
60+
<part>68</part>
61+
</score>
62+
</entry>
63+
<entry>
64+
<player team="TWO"/>
65+
<score>
66+
<part>1</part>
67+
<part>0</part>
68+
<part>68</part>
69+
</score>
70+
</entry>
71+
</scores>
72+
<winner regular="true" reason="Beide Teams sind gleichauf"/>
73+
</result>
74+
""".trimIndent()
75+
}
76+
game.players.first().displayName = "Alice"
77+
game.players.last().displayName = "Bob"
78+
game.currentState.performMoveDirectly(Advance(10))
79+
"work with violation result" {
80+
game.players.first().violation =
81+
Violation.RULE_VIOLATION(InvalidMoveException(HuIMoveMistake.MUST_EAT_SALAD, FallBack))
82+
game.getResult() shouldSerializeTo """
83+
<result>
84+
<definition>
85+
<fragment name="Siegpunkte">
86+
<aggregation>SUM</aggregation>
87+
<relevantForRanking>true</relevantForRanking>
88+
</fragment>
89+
<fragment name="Feldnummer">
90+
<aggregation>AVERAGE</aggregation>
91+
<relevantForRanking>true</relevantForRanking>
92+
</fragment>
93+
<fragment name="Karotten">
94+
<aggregation>AVERAGE</aggregation>
95+
<relevantForRanking>true</relevantForRanking>
96+
</fragment>
97+
</definition>
98+
<scores>
99+
<entry>
100+
<player name="Alice" team="ONE"/>
101+
<score>
102+
<part>0</part>
103+
<part>0</part>
104+
<part>0</part>
105+
</score>
106+
</entry>
107+
<entry>
108+
<player name="Bob" team="TWO"/>
109+
<score>
110+
<part>2</part>
111+
<part>0</part>
112+
<part>68</part>
113+
</score>
114+
</entry>
115+
</scores>
116+
<winner team="TWO" regular="false" reason="Regelverletzung von Alice: Auf einem Salatfeld muss ein Salat gegessen werden bei &apos;Zurückfallen&apos;"/>
117+
</result>
118+
""".trimIndent()
119+
}
120+
"work with regular result" {
121+
game.getResult() shouldSerializeTo """
122+
<result>
123+
<definition>
124+
<fragment name="Siegpunkte">
125+
<aggregation>SUM</aggregation>
126+
<relevantForRanking>true</relevantForRanking>
127+
</fragment>
128+
<fragment name="Feldnummer">
129+
<aggregation>AVERAGE</aggregation>
130+
<relevantForRanking>true</relevantForRanking>
131+
</fragment>
132+
<fragment name="Karotten">
133+
<aggregation>AVERAGE</aggregation>
134+
<relevantForRanking>true</relevantForRanking>
135+
</fragment>
136+
</definition>
137+
<scores>
138+
<entry>
139+
<player name="Alice" team="ONE"/>
140+
<score>
141+
<part>2</part>
142+
<part>10</part>
143+
<part>13</part>
144+
</score>
145+
</entry>
146+
<entry>
147+
<player name="Bob" team="TWO"/>
148+
<score>
149+
<part>0</part>
150+
<part>0</part>
151+
<part>68</part>
152+
</score>
153+
</entry>
154+
</scores>
155+
<winner team="ONE" regular="true" reason="Alice ist weiter vorne."/>
156+
</result>
157+
""".trimIndent()
158+
}
159+
}
160+
})

0 commit comments

Comments
 (0)