diff --git a/app/src/main/java/org/nsh07/pomodoro/utils/Utils.kt b/app/src/main/java/org/nsh07/pomodoro/utils/Utils.kt index 47378e2..2696c04 100644 --- a/app/src/main/java/org/nsh07/pomodoro/utils/Utils.kt +++ b/app/src/main/java/org/nsh07/pomodoro/utils/Utils.kt @@ -10,24 +10,30 @@ package org.nsh07.pomodoro.utils import java.util.Locale import java.util.concurrent.TimeUnit -fun millisecondsToStr(t: Long): String = - String.format( +fun millisecondsToStr(t: Long): String { + require(t >= 0L) + return String.format( Locale.getDefault(), "%02d:%02d", TimeUnit.MILLISECONDS.toMinutes(t), TimeUnit.MILLISECONDS.toSeconds(t) % TimeUnit.MINUTES.toSeconds(1) ) +} -fun millisecondsToHours(t: Long): String = - String.format( +fun millisecondsToHours(t: Long): String { + require(t >= 0L) + return String.format( Locale.getDefault(), "%dh", TimeUnit.MILLISECONDS.toHours(t) ) +} -fun millisecondsToHoursMinutes(t: Long): String = - String.format( +fun millisecondsToHoursMinutes(t: Long): String { + require(t >= 0L) + return String.format( Locale.getDefault(), "%dh %dm", TimeUnit.MILLISECONDS.toHours(t), TimeUnit.MILLISECONDS.toMinutes(t) % TimeUnit.HOURS.toMinutes(1) - ) \ No newline at end of file + ) +} \ No newline at end of file diff --git a/app/src/test/java/org/nsh07/pomodoro/ExampleUnitTest.kt b/app/src/test/java/org/nsh07/pomodoro/ExampleUnitTest.kt deleted file mode 100644 index fc01855..0000000 --- a/app/src/test/java/org/nsh07/pomodoro/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.nsh07.pomodoro - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/app/src/test/java/org/nsh07/pomodoro/utils/UtilsKtTest.kt b/app/src/test/java/org/nsh07/pomodoro/utils/UtilsKtTest.kt new file mode 100644 index 0000000..21391b1 --- /dev/null +++ b/app/src/test/java/org/nsh07/pomodoro/utils/UtilsKtTest.kt @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2025 Nishant Mishra + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.nsh07.pomodoro.utils + +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertTrue +import org.junit.Assert.assertThrows +import org.junit.Test + +class UtilsKtTest { + + @Test + fun `millisecondsToStr zero milliseconds`() { + assertEquals("00:00", millisecondsToStr(0)) + } + + @Test + fun `millisecondsToStr positive milliseconds less than a second`() { + assertEquals("00:00", millisecondsToStr(999)) + } + + @Test + fun `millisecondsToStr exactly one second`() { + assertEquals("00:01", millisecondsToStr(1000)) + } + + @Test + fun `millisecondsToStr positive milliseconds less than a minute`() { + assertEquals("00:59", millisecondsToStr(59999)) + } + + @Test + fun `millisecondsToStr exactly one minute`() { + assertEquals("01:00", millisecondsToStr(60000)) + } + + @Test + fun `millisecondsToStr positive milliseconds more than a minute`() { + assertEquals("01:01", millisecondsToStr(61999)) + } + + @Test + fun `millisecondsToStr large milliseconds value`() { + assertEquals("99:59", millisecondsToStr(5999999)) + } + + @Test + fun `millisecondsToStr negative milliseconds`() { + val exception = assertThrows(IllegalArgumentException::class.java) { + millisecondsToStr(-1) + } + assertTrue( + "millisecondsToStr should throw IllegalArgumentException for negative values", + exception is IllegalArgumentException + ) + } + + @Test + fun `millisecondsToStr Long MAX VALUE`() { + assertEquals("153722867280912:55", millisecondsToStr(Long.MAX_VALUE)) + } + + @Test + fun `millisecondsToHours zero milliseconds`() { + assertEquals("0h", millisecondsToHours(0)) + } + + @Test + fun `millisecondsToHours less than an hour`() { + assertEquals("0h", millisecondsToHours(3599999)) + } + + @Test + fun `millisecondsToHours exactly one hour`() { + assertEquals("1h", millisecondsToHours(3600000)) + } + + @Test + fun `millisecondsToHours multiple hours`() { + assertEquals("2h", millisecondsToHours(7200000)) + } + + @Test + fun `millisecondsToHours large number of hours`() { + assertEquals("25h", millisecondsToHours(25 * 3600000)) + } + + @Test + fun `millisecondsToHours negative milliseconds`() { + val exception = assertThrows(IllegalArgumentException::class.java) { + millisecondsToHours(-1) + } + assertTrue( + "millisecondsToHours should throw IllegalArgumentException for negative values", + exception is IllegalArgumentException + ) + } + + @Test + fun `millisecondsToHours Long MAX VALUE`() { + assertEquals("2562047788015h", millisecondsToHours(Long.MAX_VALUE)) + } + + @Test + fun `millisecondsToHoursMinutes zero milliseconds`() { + assertEquals("0h 0m", millisecondsToHoursMinutes(0)) + } + + @Test + fun `millisecondsToHoursMinutes less than a minute`() { + assertEquals("0h 0m", millisecondsToHoursMinutes(59999)) + } + + @Test + fun `millisecondsToHoursMinutes exactly one minute`() { + assertEquals("0h 1m", millisecondsToHoursMinutes(60000)) + } + + @Test + fun `millisecondsToHoursMinutes less than an hour but more than a minute`() { + assertEquals("0h 59m", millisecondsToHoursMinutes(3599999)) + } + + @Test + fun `millisecondsToHoursMinutes exactly one hour`() { + assertEquals("1h 0m", millisecondsToHoursMinutes(3600000)) + } + + @Test + fun `millisecondsToHoursMinutes hours and minutes`() { + assertEquals("1h 1m", millisecondsToHoursMinutes(3660000)) + } + + @Test + fun `millisecondsToHoursMinutes multiple hours and minutes`() { + assertEquals("2h 3m", millisecondsToHoursMinutes(7380000)) + } + + @Test + fun `millisecondsToHoursMinutes just less than 2 hours`() { + assertEquals("1h 59m", millisecondsToHoursMinutes(3600000 + 3599999)) + } + + @Test + fun `millisecondsToHoursMinutes negative milliseconds`() { + val exception = assertThrows(IllegalArgumentException::class.java) { + millisecondsToHoursMinutes(-1) + } + assertTrue( + "millisecondsToHoursMinutes should throw IllegalArgumentException for negative values", + exception is IllegalArgumentException + ) + } + + @Test + fun `millisecondsToHoursMinutes Long MAX VALUE`() { + assertEquals("2562047788015h 12m", millisecondsToHoursMinutes(Long.MAX_VALUE)) + } + +} \ No newline at end of file