From cccbcfaa375f450e67fc1c00ccdb633e7fdcaf58 Mon Sep 17 00:00:00 2001 From: Aaron Alef Date: Thu, 30 Apr 2020 15:21:09 +0200 Subject: [PATCH 1/5] test(sdk): add GameResultTest with string conversion check Tests are failing due to ambiguity in what the actual output should be --- .../src/test/sc/shared/GameResultTest.kt | 25 +++++++++++++++++++ .../src/test/sc/shared/PlayerScoreTest.kt | 1 - 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 socha-sdk/src/test/sc/shared/GameResultTest.kt diff --git a/socha-sdk/src/test/sc/shared/GameResultTest.kt b/socha-sdk/src/test/sc/shared/GameResultTest.kt new file mode 100644 index 000000000..2b8eacd39 --- /dev/null +++ b/socha-sdk/src/test/sc/shared/GameResultTest.kt @@ -0,0 +1,25 @@ +package sc.shared + +import sc.framework.plugins.Player + +import com.thoughtworks.xstream.XStream +import io.kotlintest.shouldBe +import io.kotlintest.shouldNotBe +import io.kotlintest.specs.StringSpec + +class GameResultTest: StringSpec({ + "to string conversion" { + val definition = ScoreDefinition().apply { add("winner") } + val scores: List = listOf( + PlayerScore(ScoreCause.REGULAR, "test"), + PlayerScore(ScoreCause.LEFT, "second test") + ) + val winners: List? = listOf(Player(PlayerColor.BLUE, "bluez")) + val gameResultWithWinner = GameResult(definition, scores, winners) + val gameResultWithoutWinner = GameResult(definition, scores, emptyList()) + val gameResultWithWinnerString = "Winner: [Player BLUE(bluez)]\nPlayer 0: \nPlayer 1: \n" + val gameResultWithoutWinnerString = "Winner: []\nPlayer 0: \nPlayer 1: \n" + gameResultWithWinner.toString() shouldBe gameResultWithWinnerString + gameResultWithoutWinner.toString() shouldBe gameResultWithoutWinnerString + } +}) diff --git a/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt b/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt index 3adfff148..867fa7d91 100644 --- a/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt +++ b/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt @@ -1,6 +1,5 @@ package sc.shared - import com.thoughtworks.xstream.XStream import io.kotlintest.shouldBe import io.kotlintest.shouldNotBe From b9df21c15493fd9a601d649866ea8f0383a29cd1 Mon Sep 17 00:00:00 2001 From: Aaron Alef Date: Sat, 2 May 2020 13:13:22 +0200 Subject: [PATCH 2/5] test(sdk): add GameResult XML test Also does a small refactor to PlayerScoreTest --- .../src/test/sc/shared/GameResultTest.kt | 99 +++++++++++++++++-- .../src/test/sc/shared/PlayerScoreTest.kt | 7 +- 2 files changed, 96 insertions(+), 10 deletions(-) diff --git a/socha-sdk/src/test/sc/shared/GameResultTest.kt b/socha-sdk/src/test/sc/shared/GameResultTest.kt index 2b8eacd39..009c1dc3d 100644 --- a/socha-sdk/src/test/sc/shared/GameResultTest.kt +++ b/socha-sdk/src/test/sc/shared/GameResultTest.kt @@ -3,23 +3,108 @@ package sc.shared import sc.framework.plugins.Player import com.thoughtworks.xstream.XStream +import io.kotlintest.inspectors.forAll import io.kotlintest.shouldBe import io.kotlintest.shouldNotBe import io.kotlintest.specs.StringSpec class GameResultTest: StringSpec({ - "to string conversion" { + "convert XML" { + val xstream = XStream().apply { + setMode(XStream.NO_REFERENCES) + classLoader = GameResult::class.java.classLoader + } val definition = ScoreDefinition().apply { add("winner") } val scores: List = listOf( PlayerScore(ScoreCause.REGULAR, "test"), PlayerScore(ScoreCause.LEFT, "second test") ) val winners: List? = listOf(Player(PlayerColor.BLUE, "bluez")) - val gameResultWithWinner = GameResult(definition, scores, winners) - val gameResultWithoutWinner = GameResult(definition, scores, emptyList()) - val gameResultWithWinnerString = "Winner: [Player BLUE(bluez)]\nPlayer 0: \nPlayer 1: \n" - val gameResultWithoutWinnerString = "Winner: []\nPlayer 0: \nPlayer 1: \n" - gameResultWithWinner.toString() shouldBe gameResultWithWinnerString - gameResultWithoutWinner.toString() shouldBe gameResultWithoutWinnerString + + val gameResultWithWinner = Pair( + GameResult(definition, scores, winners), """ + + + false + + + + + winner + SUM + true + + + + + + + REGULAR + test + + + + LEFT + second test + + + + + + + + false + false + false + false + false + false + BLUE + bluez + + + """.trimIndent() + ) + val gameResultWithoutWinner = Pair( + GameResult(definition, scores, emptyList()), """ + + + false + + + + + winner + SUM + true + + + + + + + REGULAR + test + + + + LEFT + second test + + + + + + """.trimIndent() + ) +// print(xstream.toXML(gameResultWithWinner.first)) +// print(xstream.toXML(gameResultWithoutWinner.first)) + + val gameResults = listOf(gameResultWithWinner, gameResultWithoutWinner) + gameResults.forAll { + xstream.toXML(it.first) shouldBe it.second + xstream.fromXML(it.second) shouldBe it.first + xstream.fromXML(xstream.toXML(it.first)) shouldBe it.first + } } }) diff --git a/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt b/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt index 867fa7d91..dcd8c6b7d 100644 --- a/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt +++ b/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt @@ -19,9 +19,10 @@ class PlayerScoreTest: StringSpec({ } "convert XML" { val playerScore = PlayerScore(ScoreCause.REGULAR, "Reason", 0, 1, 2) - var xstream = XStream() - xstream.setMode(XStream.NO_REFERENCES) - xstream.classLoader = PlayerScore::class.java.classLoader + val xstream = XStream().apply { + setMode(XStream.NO_REFERENCES) + classLoader = PlayerScore::class.java.classLoader + } val ISplayerScoreXML = xstream.toXML(playerScore) val SHOULDplayerScoreXML = """ From 1fb83167ba8927dfeaab2e21f95db00c7f7a5623 Mon Sep 17 00:00:00 2001 From: xerus2000 <27jf@pm.me> Date: Sat, 2 May 2020 17:52:50 +0200 Subject: [PATCH 3/5] fix(sdk): turn GameResult into data class Previously it didn't have an equals method, making proper testing almost impossible. Also removes isRegular from the XML. # Conflicts: # server/src/sc/server/Lobby.kt # server/src/sc/server/network/ClientManager.java # server/src/sc/server/network/NewClientListener.java --- socha-sdk/src/framework/sc/shared/GameResult.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/socha-sdk/src/framework/sc/shared/GameResult.kt b/socha-sdk/src/framework/sc/shared/GameResult.kt index bacc4bf6c..e8f2350f9 100644 --- a/socha-sdk/src/framework/sc/shared/GameResult.kt +++ b/socha-sdk/src/framework/sc/shared/GameResult.kt @@ -6,7 +6,7 @@ import sc.framework.plugins.Player import sc.protocol.responses.ProtocolMessage @XStreamAlias(value = "result") -class GameResult( +data class GameResult( val definition: ScoreDefinition, @XStreamImplicit(itemFieldName = "score") val scores: List, @@ -14,6 +14,9 @@ class GameResult( val winners: List? ): ProtocolMessage { + val isRegular: Boolean + get() = scores.all { it.cause == ScoreCause.REGULAR } + override fun toString(): String { val builder = StringBuilder("Winner: ").append(winners) scores.forEachIndexed { playerIndex, score -> From 5aa958e0c5d3286018c4eea34b15dc4205ba7188 Mon Sep 17 00:00:00 2001 From: xerus2000 <27jf@pm.me> Date: Sat, 2 May 2020 17:55:35 +0200 Subject: [PATCH 4/5] test(sdk): fix GameResult & simplify PlayerScore tests --- .../src/test/sc/shared/GameResultTest.kt | 151 +++++++++--------- .../src/test/sc/shared/PlayerScoreTest.kt | 9 +- 2 files changed, 77 insertions(+), 83 deletions(-) diff --git a/socha-sdk/src/test/sc/shared/GameResultTest.kt b/socha-sdk/src/test/sc/shared/GameResultTest.kt index 009c1dc3d..29ee970c8 100644 --- a/socha-sdk/src/test/sc/shared/GameResultTest.kt +++ b/socha-sdk/src/test/sc/shared/GameResultTest.kt @@ -1,110 +1,107 @@ package sc.shared -import sc.framework.plugins.Player - import com.thoughtworks.xstream.XStream -import io.kotlintest.inspectors.forAll import io.kotlintest.shouldBe -import io.kotlintest.shouldNotBe import io.kotlintest.specs.StringSpec +import sc.framework.plugins.Player class GameResultTest: StringSpec({ "convert XML" { val xstream = XStream().apply { setMode(XStream.NO_REFERENCES) - classLoader = GameResult::class.java.classLoader } val definition = ScoreDefinition().apply { add("winner") } val scores: List = listOf( - PlayerScore(ScoreCause.REGULAR, "test"), - PlayerScore(ScoreCause.LEFT, "second test") + PlayerScore(ScoreCause.REGULAR, "test", 1), + PlayerScore(ScoreCause.LEFT, "second test", 0) ) val winners: List? = listOf(Player(PlayerColor.BLUE, "bluez")) val gameResultWithWinner = Pair( GameResult(definition, scores, winners), """ - - false - - - - - winner - SUM - true - - - - - - - REGULAR - test - - - - LEFT - second test - - - - - - - - false - false - false - false - false - false - BLUE - bluez - - - """.trimIndent() + + + + winner + SUM + true + + + + + + + REGULAR + test + + 1 + + + + LEFT + second test + + 0 + + + + + + + + false + false + false + false + false + false + BLUE + bluez + + + """.trimIndent() ) val gameResultWithoutWinner = Pair( GameResult(definition, scores, emptyList()), """ - - false - - - - - winner - SUM - true - - - - - - - REGULAR - test - - - - LEFT - second test - - - - - - """.trimIndent() + + + + winner + SUM + true + + + + + + + REGULAR + test + + 1 + + + + LEFT + second test + + 0 + + + + + + """.trimIndent() ) // print(xstream.toXML(gameResultWithWinner.first)) // print(xstream.toXML(gameResultWithoutWinner.first)) val gameResults = listOf(gameResultWithWinner, gameResultWithoutWinner) - gameResults.forAll { + gameResults.forEach { xstream.toXML(it.first) shouldBe it.second xstream.fromXML(it.second) shouldBe it.first - xstream.fromXML(xstream.toXML(it.first)) shouldBe it.first } } }) diff --git a/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt b/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt index dcd8c6b7d..e2fd0a390 100644 --- a/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt +++ b/socha-sdk/src/test/sc/shared/PlayerScoreTest.kt @@ -21,10 +21,8 @@ class PlayerScoreTest: StringSpec({ val playerScore = PlayerScore(ScoreCause.REGULAR, "Reason", 0, 1, 2) val xstream = XStream().apply { setMode(XStream.NO_REFERENCES) - classLoader = PlayerScore::class.java.classLoader } - val ISplayerScoreXML = xstream.toXML(playerScore) - val SHOULDplayerScoreXML = """ + val playerScoreXML = """ REGULAR Reason @@ -34,8 +32,7 @@ class PlayerScoreTest: StringSpec({ 2 """.trimIndent() - playerScore shouldBe xstream.fromXML(SHOULDplayerScoreXML) - playerScore shouldBe xstream.fromXML(ISplayerScoreXML) - ISplayerScoreXML shouldBe SHOULDplayerScoreXML + xstream.fromXML(playerScoreXML) shouldBe playerScore + xstream.toXML(playerScore) shouldBe playerScoreXML } }) \ No newline at end of file From 0479c5046e0ca9854127a7546c6a5582962bb170 Mon Sep 17 00:00:00 2001 From: xerus2000 <27jf@pm.me> Date: Sun, 3 May 2020 15:58:41 +0200 Subject: [PATCH 5/5] test(sdk): remove debug message comments # Conflicts: # server/src/sc/server/Lobby.kt # server/src/sc/server/network/ClientManager.java # server/src/sc/server/network/NewClientListener.java --- socha-sdk/src/test/sc/shared/GameResultTest.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/socha-sdk/src/test/sc/shared/GameResultTest.kt b/socha-sdk/src/test/sc/shared/GameResultTest.kt index 29ee970c8..e2fb34a62 100644 --- a/socha-sdk/src/test/sc/shared/GameResultTest.kt +++ b/socha-sdk/src/test/sc/shared/GameResultTest.kt @@ -95,8 +95,6 @@ class GameResultTest: StringSpec({ """.trimIndent() ) -// print(xstream.toXML(gameResultWithWinner.first)) -// print(xstream.toXML(gameResultWithoutWinner.first)) val gameResults = listOf(gameResultWithWinner, gameResultWithoutWinner) gameResults.forEach {