From 8ac6cd3e627257b063c031d690783bc87fb62372 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 15 Jun 2022 13:27:21 +0600 Subject: [PATCH] fix of #34 and upfix for #27 --- .../krontab/internal/NearDateTimeCalculator.kt | 6 +++--- .../inmo/krontab/utils/InfinityLoopCheckTest.kt | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/commonMain/kotlin/dev/inmo/krontab/internal/NearDateTimeCalculator.kt b/src/commonMain/kotlin/dev/inmo/krontab/internal/NearDateTimeCalculator.kt index a6ada42..7be2050 100644 --- a/src/commonMain/kotlin/dev/inmo/krontab/internal/NearDateTimeCalculator.kt +++ b/src/commonMain/kotlin/dev/inmo/krontab/internal/NearDateTimeCalculator.kt @@ -101,7 +101,7 @@ internal fun NearDateTimeCalculatorDays( times: Array ) = CommonNearDateTimeCalculator( times, - { it.dayOfMonth.toByte() }, + { (it.dayOfMonth - 1).toByte() }, { dateTime, newOne -> val dateTime = (if (newOne < dateTime.dayOfMonth) { dateTime.plus(1.months) @@ -109,7 +109,7 @@ internal fun NearDateTimeCalculatorDays( dateTime }) dateTime.copy( - dayOfMonth = min(dateTime.month.days(dateTime.year) - 1, newOne.toInt()), // index1 + dayOfMonth = min(dateTime.month.days(dateTime.year), newOne.toInt() + 1), // index1 hour = 0, minute = 0, second = 0, @@ -122,7 +122,7 @@ internal fun NearDateTimeCalculatorMonths( times: Array ) = CommonNearDateTimeCalculator( times, - { it.dayOfMonth.toByte() }, + { it.month0.toByte() }, { dateTime, newOne -> (if (newOne < dateTime.month0) { dateTime.plus(1.years) diff --git a/src/commonTest/kotlin/dev/inmo/krontab/utils/InfinityLoopCheckTest.kt b/src/commonTest/kotlin/dev/inmo/krontab/utils/InfinityLoopCheckTest.kt index 8e4cd60..a525ace 100644 --- a/src/commonTest/kotlin/dev/inmo/krontab/utils/InfinityLoopCheckTest.kt +++ b/src/commonTest/kotlin/dev/inmo/krontab/utils/InfinityLoopCheckTest.kt @@ -1,14 +1,22 @@ package dev.inmo.krontab.utils +import com.soywiz.klock.DateTime +import com.soywiz.klock.days import dev.inmo.krontab.buildSchedule -import kotlin.test.Test -import kotlin.test.assertNotNull +import kotlin.test.* class InfinityLoopCheckTest { @Test fun absenceOfInfinityLoopCheckTest() { - runTest { - assertNotNull(buildSchedule("0 0 0 1 *").next()) + val now = DateTime.now().startOfYear.startOfDay + for (i in 0 until now.year.days) { + val scheduleDateTime = (now + i.days) + runTest { + assertEquals( + scheduleDateTime, + buildSchedule("0 0 0 ${scheduleDateTime.dayOfMonth - 1} ${scheduleDateTime.month0}").next(now) + ) + } } } }