diff --git a/core/src/main/kotlin/plus/rua/project/LunarCache.kt b/core/src/main/kotlin/plus/rua/project/LunarCache.kt index 3199e23..f62bbe9 100644 --- a/core/src/main/kotlin/plus/rua/project/LunarCache.kt +++ b/core/src/main/kotlin/plus/rua/project/LunarCache.kt @@ -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 ) diff --git a/core/src/test/kotlin/plus/rua/project/LunarCacheBirthdayTest.kt b/core/src/test/kotlin/plus/rua/project/LunarCacheBirthdayTest.kt new file mode 100644 index 0000000..7235935 --- /dev/null +++ b/core/src/test/kotlin/plus/rua/project/LunarCacheBirthdayTest.kt @@ -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) + } +}