From 6e0766534ad4cf0da7598981f6dbaa5b4ebfc3c4 Mon Sep 17 00:00:00 2001 From: Jay Date: Sun, 26 Jul 2026 14:33:03 -0400 Subject: [PATCH] Identify hero results by seat --- .../java/com/jsjdesigns/poker/HandSummary.kt | 16 +++++++++++----- .../com/jsjdesigns/poker/HandSummaryTest.kt | 19 ++++++++++++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/jsjdesigns/poker/HandSummary.kt b/app/src/main/java/com/jsjdesigns/poker/HandSummary.kt index 38a2061..47aaf95 100644 --- a/app/src/main/java/com/jsjdesigns/poker/HandSummary.kt +++ b/app/src/main/java/com/jsjdesigns/poker/HandSummary.kt @@ -11,16 +11,19 @@ import com.jsjdesigns.poker.game.HandResult */ data class HandSummary( val handNumber: Int, - val winnerNames: List, + /** Display labels in the engine's winner order; the human seat is always "You". */ + val winnerLabels: List, + /** Derived from winner seat indices, never from a player-controlled name. */ + val heroWon: Boolean, val potSize: Int, val heroNet: Int, val wentToShowdown: Boolean, ) { val title: String get() = when { - winnerNames.size == 1 && winnerNames.single() == "You" -> "You win" - winnerNames.size == 1 -> "${winnerNames.single()} wins" - else -> "${winnerNames.joinToString(" & ")} win" + winnerLabels.size == 1 && heroWon -> "You win" + winnerLabels.size == 1 -> "${winnerLabels.single()} wins" + else -> "${winnerLabels.joinToString(" & ")} win" } val detail: String @@ -47,7 +50,10 @@ fun handSummaryFor( return HandSummary( handNumber = handNumber, - winnerNames = result.winners.map(seatNames::get), + winnerLabels = result.winners.map { winner -> + if (winner == heroSeat) "You" else seatNames[winner] + }, + heroWon = heroSeat in result.winners, potSize = result.potSize, heroNet = result.net[heroSeat], wentToShowdown = result.wentToShowdown, diff --git a/app/src/test/java/com/jsjdesigns/poker/HandSummaryTest.kt b/app/src/test/java/com/jsjdesigns/poker/HandSummaryTest.kt index e3c41f6..910f28b 100644 --- a/app/src/test/java/com/jsjdesigns/poker/HandSummaryTest.kt +++ b/app/src/test/java/com/jsjdesigns/poker/HandSummaryTest.kt @@ -43,7 +43,7 @@ class HandSummaryTest { } @Test - fun `hero win and uncontested pot are explicit`() { + fun `hero is identified by seat when the player uses a custom name`() { val summary = handSummaryFor( handNumber = 3, result = result( @@ -52,15 +52,16 @@ class HandSummaryTest { showdown = false, pot = 6, ), - seatNames = listOf("You", "Ada", "Bruno"), + seatNames = listOf("Jay", "Ada", "Bruno"), ) assertEquals("You win", summary.title) + assertTrue(summary.heroWon) assertEquals("Uncontested • Pot 6 • You won 5", summary.detail) } @Test - fun `several side-pot winners are not described as one split pot`() { + fun `custom-named hero is labelled as you among several winners`() { val summary = handSummaryFor( handNumber = 9, result = result( @@ -68,17 +69,25 @@ class HandSummaryTest { winners = listOf(0, 1), pot = 40, ), - seatNames = listOf("You", "Ada", "Bruno"), + seatNames = listOf("Jay", "Ada", "Bruno"), ) assertEquals("You & Ada win", summary.title) + assertTrue(summary.heroWon) assertTrue(summary.detail.endsWith("You broke even")) } } class VisibleHandSummaryTest { - private val summary = HandSummary(4, listOf("Ada"), 20, -4, true) + private val summary = HandSummary( + handNumber = 4, + winnerLabels = listOf("Ada"), + heroWon = false, + potSize = 20, + heroNet = -4, + wentToShowdown = true, + ) private fun snapshot( handNumber: Int = 4,