mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Place MidnightTimer under test
This commit is contained in:
@@ -39,11 +39,11 @@ open class MidnightTimer @Inject constructor() {
|
||||
|
||||
@Synchronized fun onPause(): MutableList<Runnable>? = executor.shutdownNow()
|
||||
|
||||
@Synchronized fun onResume() {
|
||||
executor = Executors.newSingleThreadScheduledExecutor()
|
||||
@Synchronized fun onResume(delayOffsetInMillis: Long = DateUtils.MINUTE_LENGTH, testExecutor: ScheduledExecutorService? = null) {
|
||||
executor = testExecutor ?: Executors.newSingleThreadScheduledExecutor()
|
||||
executor.scheduleAtFixedRate(
|
||||
{ notifyListeners() },
|
||||
DateUtils.millisecondsUntilTomorrowWithOffset() + 1000,
|
||||
DateUtils.millisecondsUntilTomorrowWithOffset() + delayOffsetInMillis,
|
||||
DateUtils.DAY_LENGTH,
|
||||
TimeUnit.MILLISECONDS
|
||||
)
|
||||
|
||||
@@ -95,15 +95,13 @@ open class BaseUnitTest {
|
||||
}
|
||||
|
||||
fun unixTime(year: Int, month: Int, day: Int): Long {
|
||||
val cal = getStartOfTodayCalendar()
|
||||
cal.set(year, month, day, 0, 0, 0)
|
||||
return cal.timeInMillis
|
||||
return unixTime(year, month, day, 0, 0)
|
||||
}
|
||||
|
||||
open fun unixTime(year: Int, month: Int, day: Int, hour: Int, minute: Int): Long {
|
||||
open fun unixTime(year: Int, month: Int, day: Int, hour: Int, minute: Int, milliseconds: Long = 0): Long {
|
||||
val cal = getStartOfTodayCalendar()
|
||||
cal.set(year, month, day, hour, minute)
|
||||
return cal.timeInMillis
|
||||
return cal.timeInMillis + milliseconds
|
||||
}
|
||||
|
||||
fun timestamp(year: Int, month: Int, day: Int): Timestamp {
|
||||
|
||||
@@ -138,7 +138,7 @@ class ReminderSchedulerTest : BaseUnitTest() {
|
||||
reminderScheduler.schedule(habit)
|
||||
}
|
||||
|
||||
override fun unixTime(year: Int, month: Int, day: Int, hour: Int, minute: Int): Long {
|
||||
override fun unixTime(year: Int, month: Int, day: Int, hour: Int, minute: Int, milliseconds: Long): Long {
|
||||
val cal: Calendar = getStartOfTodayCalendar()
|
||||
cal[year, month, day, hour] = minute
|
||||
return cal.timeInMillis
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.isoron.uhabits.core.utils
|
||||
|
||||
import kotlinx.coroutines.asCoroutineDispatcher
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.isoron.uhabits.core.BaseUnitTest
|
||||
import org.junit.Test
|
||||
import java.util.Calendar
|
||||
import java.util.TimeZone
|
||||
import java.util.concurrent.Executors
|
||||
import kotlin.coroutines.resume
|
||||
import kotlin.coroutines.suspendCoroutine
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class MidnightTimerTest : BaseUnitTest() {
|
||||
|
||||
@Test
|
||||
fun testMidnightTimer_notifyListener_atMidnight() = runBlocking {
|
||||
// Given
|
||||
val executor = Executors.newSingleThreadScheduledExecutor()
|
||||
val dispatcher = executor.asCoroutineDispatcher()
|
||||
|
||||
withContext(dispatcher) {
|
||||
DateUtils.setFixedTimeZone(TimeZone.getTimeZone("GMT"))
|
||||
DateUtils.setFixedLocalTime(unixTime(2017, Calendar.JANUARY, 1, 23, 59, DateUtils.MINUTE_LENGTH - 1))
|
||||
|
||||
val suspendedListener = suspendCoroutine<Boolean> { continuation ->
|
||||
val listener = object : MidnightTimer.MidnightListener {
|
||||
override fun atMidnight() {
|
||||
continuation.resume(true)
|
||||
}
|
||||
}
|
||||
|
||||
MidnightTimer().apply {
|
||||
addListener(listener)
|
||||
// When
|
||||
onResume(1, executor)
|
||||
}
|
||||
}
|
||||
|
||||
// Then
|
||||
assertEquals(true, suspendedListener)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user