ChineseCalendarTest.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. using System;
  2. using Masuit.Tools.DateTimeExt;
  3. using Xunit;
  4. namespace Masuit.Tools.Abstractions.Test.DateTimeExt;
  5. public class ChineseCalendarTest
  6. {
  7. [Fact]
  8. public void Can_Test()
  9. {
  10. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).AnimalString, "龙");
  11. Assert.Equal(new ChineseCalendar(new DateTime(2025, 1, 29)).ChineseCalendarHoliday, "春节");
  12. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).ChineseConstellation, "毕月乌");
  13. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).ChineseDateString, "二零二三年冬月二十");
  14. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).ChineseHour, "甲子");
  15. Assert.Equal(new ChineseCalendar(new DateTime(2024, 12, 21)).ChineseTwentyFourDay, "冬至");
  16. Assert.Equal(new ChineseCalendar(new DateTime(2024, 12, 21)).ChineseTwentyFourNextDay, new ChineseCalendar(new DateTime(2025, 1, 5)));
  17. Assert.Equal(new ChineseCalendar(new DateTime(2024, 12, 21)).ChineseTwentyFourPrevDay, new ChineseCalendar(new DateTime(2024, 12, 6)));
  18. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).ChineseYear, 2023);
  19. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).DateHoliday, "元旦");
  20. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).DateString, "公元2024年1月1日");
  21. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).GanZhiDateString, "癸卯年甲子月甲子日");
  22. Assert.True(new ChineseCalendar(new DateTime(2024, 1, 1)).IsChineseLeapYear);
  23. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).NextDay, new ChineseCalendar(new DateTime(2024, 1, 2)));
  24. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).PrevDay, new ChineseCalendar(new DateTime(2023, 12, 31)));
  25. Assert.Equal(new ChineseCalendar(new DateTime(2024, 1, 1)).WeekDay, DayOfWeek.Monday);
  26. }
  27. [Fact]
  28. public void Constructor_ShouldInitializeWithGregorianDate()
  29. {
  30. // Arrange
  31. var date = new DateTime(2023, 10, 1);
  32. // Act
  33. var calendar = new ChineseCalendar(date);
  34. // Assert
  35. Assert.Equal(date, calendar.Date);
  36. }
  37. [Fact]
  38. public void Constructor_ShouldInitializeWithLunarDate()
  39. {
  40. // Arrange
  41. var year = 2023;
  42. var month = 8;
  43. var day = 15;
  44. // Act
  45. var calendar = new ChineseCalendar(year, month, day);
  46. // Assert
  47. Assert.Equal(year, calendar.ChineseYear);
  48. Assert.Equal(month, calendar.ChineseMonth);
  49. Assert.Equal(day, calendar.ChineseDay);
  50. }
  51. [Fact]
  52. public void IsHoliday_ShouldReturnTrueForHoliday()
  53. {
  54. // Arrange
  55. var date = new DateTime(2023, 10, 1); // 国庆节
  56. var calendar = new ChineseCalendar(date);
  57. // Act
  58. var isHoliday = calendar.IsHoliday;
  59. // Assert
  60. Assert.True(isHoliday);
  61. }
  62. [Fact]
  63. public void IsWorkDay_ShouldReturnFalseForHoliday()
  64. {
  65. // Arrange
  66. var date = new DateTime(2023, 10, 1); // 国庆节
  67. var calendar = new ChineseCalendar(date);
  68. // Act
  69. var isWorkDay = calendar.IsWorkDay;
  70. // Assert
  71. Assert.False(isWorkDay);
  72. }
  73. [Fact]
  74. public void IsWorkDay_ShouldReturnTrueForWorkDay()
  75. {
  76. // Arrange
  77. var date = new DateTime(2023, 10, 9); // 普通工作日
  78. var calendar = new ChineseCalendar(date);
  79. // Act
  80. var isWorkDay = calendar.IsWorkDay;
  81. // Assert
  82. Assert.True(isWorkDay);
  83. }
  84. [Fact]
  85. public void AddDays_ShouldReturnCorrectDate()
  86. {
  87. // Arrange
  88. var date = new DateTime(2023, 10, 1);
  89. var calendar = new ChineseCalendar(date);
  90. // Act
  91. var newCalendar = calendar.AddDays(10);
  92. // Assert
  93. Assert.Equal(new DateTime(2023, 10, 11), newCalendar.Date);
  94. }
  95. [Fact]
  96. public void AddMonths_ShouldReturnCorrectDate()
  97. {
  98. // Arrange
  99. var date = new DateTime(2023, 10, 1);
  100. var calendar = new ChineseCalendar(date);
  101. // Act
  102. var newCalendar = calendar.AddMonths(2);
  103. // Assert
  104. Assert.Equal(new DateTime(2023, 12, 1), newCalendar.Date);
  105. }
  106. [Fact]
  107. public void Equals_ShouldReturnTrueForSameDate()
  108. {
  109. // Arrange
  110. var date = new DateTime(2023, 10, 1);
  111. var calendar1 = new ChineseCalendar(date);
  112. var calendar2 = new ChineseCalendar(date);
  113. // Act
  114. var isEqual = calendar1.Equals(calendar2);
  115. // Assert
  116. Assert.True(isEqual);
  117. }
  118. [Fact]
  119. public void Equals_ShouldReturnFalseForDifferentDate()
  120. {
  121. // Arrange
  122. var calendar1 = new ChineseCalendar(new DateTime(2023, 10, 1));
  123. var calendar2 = new ChineseCalendar(new DateTime(2023, 10, 2));
  124. // Act
  125. var isEqual = calendar1.Equals(calendar2);
  126. // Assert
  127. Assert.False(isEqual);
  128. }
  129. [Fact]
  130. public void ChineseCalendarHoliday_ShouldReturnCorrectHoliday()
  131. {
  132. // Arrange
  133. var date = new DateTime(2023, 1, 22); // 农历春节
  134. var calendar = new ChineseCalendar(date);
  135. // Act
  136. var holiday = calendar.ChineseCalendarHoliday;
  137. // Assert
  138. Assert.Equal("春节", holiday);
  139. }
  140. [Fact]
  141. public void WeekDayHoliday_ShouldReturnCorrectHoliday()
  142. {
  143. // Arrange
  144. var date = new DateTime(2023, 5, 14); // 母亲节
  145. var calendar = new ChineseCalendar(date);
  146. // Act
  147. var holiday = calendar.WeekDayHoliday;
  148. // Assert
  149. Assert.Equal("母亲节", holiday);
  150. }
  151. [Fact]
  152. public void DateHoliday_ShouldReturnCorrectHoliday()
  153. {
  154. // Arrange
  155. var date = new DateTime(2023, 10, 1); // 国庆节
  156. var calendar = new ChineseCalendar(date);
  157. // Act
  158. var holiday = calendar.DateHoliday;
  159. // Assert
  160. Assert.True(holiday.Contains("国庆节"));
  161. }
  162. [Fact]
  163. public void Constellation_ShouldReturnCorrectConstellation()
  164. {
  165. // Arrange
  166. var date = new DateTime(2023, 4, 20); // 金牛座
  167. var calendar = new ChineseCalendar(date);
  168. // Act
  169. var constellation = calendar.Constellation;
  170. // Assert
  171. Assert.Equal("金牛座", constellation);
  172. }
  173. [Fact]
  174. public void AnimalString_ShouldReturnCorrectAnimal()
  175. {
  176. // Arrange
  177. var date = new DateTime(2023, 1, 22); // 兔年
  178. var calendar = new ChineseCalendar(date);
  179. // Act
  180. var animal = calendar.AnimalString;
  181. // Assert
  182. Assert.Equal("兔", animal);
  183. }
  184. [Fact]
  185. public void GanZhiYearString_ShouldReturnCorrectGanZhiYear()
  186. {
  187. // Arrange
  188. var date = new DateTime(2023, 1, 22); // 癸卯年
  189. var calendar = new ChineseCalendar(date);
  190. // Act
  191. var ganZhiYear = calendar.GanZhiYearString;
  192. // Assert
  193. Assert.Equal("癸卯年", ganZhiYear);
  194. }
  195. [Fact]
  196. public void GanZhiMonthString_ShouldReturnCorrectGanZhiMonth()
  197. {
  198. // Arrange
  199. var date = new DateTime(2023, 1, 22); // 甲寅月
  200. var calendar = new ChineseCalendar(date);
  201. // Act
  202. var ganZhiMonth = calendar.GanZhiMonthString;
  203. // Assert
  204. Assert.Equal("甲寅月", ganZhiMonth);
  205. }
  206. [Fact]
  207. public void GanZhiDayString_ShouldReturnCorrectGanZhiDay()
  208. {
  209. // Arrange
  210. var date = new DateTime(2023, 1, 22);
  211. var calendar = new ChineseCalendar(date);
  212. // Act
  213. var ganZhiDay = calendar.GanZhiDayString;
  214. // Assert
  215. Assert.Equal("庚辰日", ganZhiDay);
  216. }
  217. }