feat: compute birthday flag in LunarCache
This commit is contained in:
parent
5c8839dea2
commit
06ac30e6d2
@ -75,23 +75,25 @@ class LunarCache(
|
||||
val lunarDay = solarDay.getLunarDay()
|
||||
val lunarMonth = lunarDay.getLunarMonth()
|
||||
val lunarMonthName = lunarMonth.getName()
|
||||
val isBirthday = (date.month.number == 9 && date.day == 4) ||
|
||||
(lunarDay.getLunarMonth().getIndexInYear() == 0 && lunarDay.day == 21)
|
||||
|
||||
// 农历传统节日(仅当天)
|
||||
val lunarFestival = lunarDay.getFestival()
|
||||
if (lunarFestival != null) {
|
||||
return DayCellInfo(lunarFestival.getName(), true, holidayBadge, lunarMonthName)
|
||||
return DayCellInfo(lunarFestival.getName(), true, holidayBadge, lunarMonthName, isBirthday)
|
||||
}
|
||||
|
||||
// 节气(当天才显示)
|
||||
val termDay = solarDay.getTermDay()
|
||||
if (termDay.getDayIndex() == 0) {
|
||||
return DayCellInfo(termDay.getSolarTerm().getName(), true, holidayBadge, lunarMonthName)
|
||||
return DayCellInfo(termDay.getSolarTerm().getName(), true, holidayBadge, lunarMonthName, isBirthday)
|
||||
}
|
||||
|
||||
// 公历节日(仅当天)
|
||||
val solarFestival = solarDay.getFestival()
|
||||
if (solarFestival != null) {
|
||||
return DayCellInfo(solarFestival.getName(), true, holidayBadge, lunarMonthName)
|
||||
return DayCellInfo(solarFestival.getName(), true, holidayBadge, lunarMonthName, isBirthday)
|
||||
}
|
||||
|
||||
// 默认:农历日期
|
||||
@ -101,7 +103,7 @@ class LunarCache(
|
||||
} else {
|
||||
name
|
||||
}
|
||||
return DayCellInfo(text, false, holidayBadge, lunarMonthName)
|
||||
return DayCellInfo(text, false, holidayBadge, lunarMonthName, isBirthday)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@ -121,5 +123,6 @@ data class DayCellInfo(
|
||||
val annotationText: String,
|
||||
val isAnnotationHighlight: Boolean,
|
||||
val holidayBadge: String?,
|
||||
val lunarMonthName: String? = null
|
||||
val lunarMonthName: String? = null,
|
||||
val isBirthday: Boolean = false
|
||||
)
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
package plus.rua.project
|
||||
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import kotlinx.datetime.LocalDate
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
|
||||
class LunarCacheBirthdayTest {
|
||||
private val cache = LunarCache()
|
||||
|
||||
@Test
|
||||
fun solarBirthdaySeptember4_returnsTrue() = runTest {
|
||||
val info = cache.getOrCompute(LocalDate(2026, 9, 4))
|
||||
assertTrue("阳历 9 月 4 日应为生日", info.isBirthday)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun lunarBirthdayFirstMonthDay21_returnsTrue() = runTest {
|
||||
// 2026 年农历正月二十一对应阳历 2026-03-09
|
||||
val info = cache.getOrCompute(LocalDate(2026, 3, 9))
|
||||
assertTrue("农历正月二十一应为生日", info.isBirthday)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun regularDate_returnsFalse() = runTest {
|
||||
val info = cache.getOrCompute(LocalDate(2026, 6, 15))
|
||||
assertFalse("普通日期不应为生日", info.isBirthday)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun solarBirthdayNotFirstLunarDay21_stillReturnsTrue() = runTest {
|
||||
val info = cache.getOrCompute(LocalDate(2026, 9, 4))
|
||||
assertTrue(info.isBirthday)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun lunarBirthdayNotSeptember4_stillReturnsTrue() = runTest {
|
||||
val info = cache.getOrCompute(LocalDate(2026, 3, 9))
|
||||
assertTrue(info.isBirthday)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user