refactor(android): add shared formatDuration + ms/sec conversion helpers
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
package com.fabledsword.minstrel.shared
|
||||||
|
|
||||||
|
const val MILLIS_PER_SECOND = 1000
|
||||||
|
|
||||||
|
private const val SECONDS_PER_MINUTE = 60
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formats [seconds] as m:ss. Returns [zero] when [seconds] <= 0 — pass
|
||||||
|
* "--:--" for unknown track durations, "0:00" (default) for playback
|
||||||
|
* position/duration. The single mm:ss formatter for the client.
|
||||||
|
*/
|
||||||
|
fun formatDuration(seconds: Int, zero: String = "0:00"): String =
|
||||||
|
if (seconds <= 0) {
|
||||||
|
zero
|
||||||
|
} else {
|
||||||
|
"%d:%02d".format(seconds / SECONDS_PER_MINUTE, seconds % SECONDS_PER_MINUTE)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Int.secondsToMillis(): Int = this * MILLIS_PER_SECOND
|
||||||
|
|
||||||
|
fun Int.millisToSeconds(): Int = this / MILLIS_PER_SECOND
|
||||||
|
|
||||||
|
fun Long.millisToSeconds(): Int = (this / MILLIS_PER_SECOND).toInt()
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.fabledsword.minstrel.shared
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class FormattingTest {
|
||||||
|
@Test
|
||||||
|
fun `formatDuration formats minutes and seconds`() {
|
||||||
|
assertEquals("0:05", formatDuration(5))
|
||||||
|
assertEquals("2:05", formatDuration(125))
|
||||||
|
assertEquals("10:00", formatDuration(600))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `formatDuration uses the zero string for non-positive input`() {
|
||||||
|
assertEquals("0:00", formatDuration(0))
|
||||||
|
assertEquals("0:00", formatDuration(-3))
|
||||||
|
assertEquals("--:--", formatDuration(0, zero = "--:--"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `conversions round-trip seconds and millis`() {
|
||||||
|
assertEquals(5000, 5.secondsToMillis())
|
||||||
|
assertEquals(5, 5000.millisToSeconds())
|
||||||
|
assertEquals(5, 5000L.millisToSeconds())
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user