From c582591cd43d18b6ab9dfd821158562e48657579 Mon Sep 17 00:00:00 2001 From: PaulN Date: Sun, 25 Feb 2024 14:07:43 -0800 Subject: [PATCH] adds test for truncated data handling --- .../meringue/racedata/DataSourceHandler.kt | 26 +++++++++++-------- .../racedata/DataSourceHandlerTest.kt | 9 +++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/com/normtronix/meringue/racedata/DataSourceHandler.kt b/src/main/kotlin/com/normtronix/meringue/racedata/DataSourceHandler.kt index cb153e8..fe53cce 100644 --- a/src/main/kotlin/com/normtronix/meringue/racedata/DataSourceHandler.kt +++ b/src/main/kotlin/com/normtronix/meringue/racedata/DataSourceHandler.kt @@ -96,19 +96,23 @@ class DataSourceHandler(private val leaderboard: RaceOrder, internal fun convertToSeconds(rawTime: String): Double { - val timeFields = rawTime.trim('"').split(':') - val hours = timeFields[0].toInt() - val minutes = timeFields[1].toInt() - val seconds = when ("." in timeFields[2]) { - true -> { - val fields = timeFields[2].split(".") - fields[0].toInt() + fields[1].toInt() / 1000.0 + try { + val timeFields = rawTime.trim('"').split(':') + val hours = timeFields[0].toInt() + val minutes = timeFields[1].toInt() + val seconds = when ("." in timeFields[2]) { + true -> { + val fields = timeFields[2].split(".") + fields[0].toInt() + fields[1].toInt() / 1000.0 + } + false -> timeFields[2].toDouble() } - false -> timeFields[2].toDouble() + return hours * 3600.0 + + minutes * 60.0 + + seconds + } catch (e: IndexOutOfBoundsException) { + throw DateTimeParseException(e.message, rawTime, 0) } - return hours * 3600.0 + - minutes * 60.0 + - seconds } companion object { diff --git a/src/test/kotlin/com/normtronix/meringue/racedata/DataSourceHandlerTest.kt b/src/test/kotlin/com/normtronix/meringue/racedata/DataSourceHandlerTest.kt index a9c0d59..b6c2793 100644 --- a/src/test/kotlin/com/normtronix/meringue/racedata/DataSourceHandlerTest.kt +++ b/src/test/kotlin/com/normtronix/meringue/racedata/DataSourceHandlerTest.kt @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test import java.io.BufferedReader import java.io.FileReader +import java.time.format.DateTimeParseException internal class DataSourceHandlerTest { @@ -25,6 +26,14 @@ internal class DataSourceHandlerTest { assertEquals(97335.123, ds.convertToSeconds("27:02:15.123")) } + @Test + fun testTimeTruncated() { + val ds = DataSourceHandler(RaceOrder(), "thil", 0, setOf()) + assertThrows(DateTimeParseException::class.java) { + ds.convertToSeconds("27:0") + } + } + class TestHandler: EventHandler { val callbackCount: MutableMap = mutableMapOf()