@@ -5,11 +5,10 @@ import io.kotest.assertions.until.Interval
5
5
import io.kotest.assertions.until.fibonacci
6
6
import io.kotest.assertions.withClue
7
7
import io.kotest.core.spec.style.WordSpec
8
- import io.kotest.matchers.collections.shouldBeEmpty
9
- import io.kotest.matchers.collections.shouldHaveSize
10
- import io.kotest.matchers.nulls.shouldNotBeNull
11
- import io.kotest.matchers.shouldBe
12
- import io.kotest.matchers.string.shouldContain
8
+ import io.kotest.matchers.*
9
+ import io.kotest.matchers.collections.*
10
+ import io.kotest.matchers.nulls.*
11
+ import io.kotest.matchers.string.*
13
12
import sc.api.plugins.Team
14
13
import sc.protocol.ResponsePacket
15
14
import sc.protocol.requests.JoinPreparedRoomRequest
@@ -55,7 +54,15 @@ class LobbyGameTest: WordSpec({
55
54
lobby.games shouldHaveSize 1
56
55
return prepared
57
56
}
58
-
57
+ fun observeRoom(roomId: String ): MessageListener <ObservableRoomMessage > {
58
+ val roomListener = MessageListener <ObservableRoomMessage >()
59
+ withClue("accept observation") {
60
+ admin.observe(roomId, roomListener::addMessage)
61
+ adminListener.waitForMessage(ObservationResponse ::class)
62
+ }
63
+ return roomListener
64
+ }
65
+
59
66
val playerClients = Array (2) { testLobby.connectClient() }
60
67
val playerHandlers = Array (2) { TestGameHandler () }
61
68
val players = Array (2) { playerClients[it].asPlayer(playerHandlers[it]) }
@@ -64,7 +71,15 @@ class LobbyGameTest: WordSpec({
64
71
players[0 ].joinGame(TestPlugin .TEST_PLUGIN_UUID )
65
72
" create a room for it" {
66
73
await("Room opened") { lobby.games.size shouldBe 1 }
67
- lobby.games.single().clients shouldHaveSize 1
74
+ val room = lobby.games.single()
75
+ room.clients shouldHaveSize 1
76
+ " return GameResult on step" {
77
+ val roomListener = observeRoom(room.id)
78
+ admin.control(room.id).step()
79
+ val result = roomListener.waitForMessage(GameResult ::class)
80
+ result.winner shouldBe Team .ONE
81
+ playerHandlers[0 ].gameResult?.winner shouldBe Team .ONE
82
+ }
68
83
playerClients[0 ].stop()
69
84
await("Stops when client dies") { lobby.games shouldHaveSize 0 }
70
85
// TODO do not terminate room when client leaves
@@ -163,12 +178,7 @@ class LobbyGameTest: WordSpec({
163
178
room.slots[1 ].isEmpty shouldBe false
164
179
}
165
180
166
- val roomListener = MessageListener <ObservableRoomMessage >()
167
- withClue("accept observation") {
168
- admin.observe(prepared.roomId, roomListener::addMessage)
169
- adminListener.waitForMessage(ObservationResponse ::class)
170
- }
171
-
181
+ val roomListener = observeRoom(prepared.roomId)
172
182
players[0 ].joinGameWithReservation(prepared.reservations.single())
173
183
" react to controller" {
174
184
await("game start") {
0 commit comments