@@ -130,6 +130,65 @@ class LocalDateTimeTest {
130
130
assertFailsWith<IllegalArgumentException > { localTime(0 , 0 , 0 , 1_000_000_000 ) }
131
131
}
132
132
133
+ @Test
134
+ fun createOrNull () {
135
+ // Test createOrNull with month number
136
+ val validDateTime1 = LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , 30 , 45 , 500_000_000 )
137
+ assertNotNull(validDateTime1)
138
+ assertEquals(2020 , validDateTime1!! .year)
139
+ assertEquals(1 , validDateTime1.month.number)
140
+ assertEquals(1 , validDateTime1.day)
141
+ assertEquals(12 , validDateTime1.hour)
142
+ assertEquals(30 , validDateTime1.minute)
143
+ assertEquals(45 , validDateTime1.second)
144
+ assertEquals(500_000_000 , validDateTime1.nanosecond)
145
+
146
+ // Test createOrNull with Month enum
147
+ val validDateTime2 = LocalDateTime .createOrNull(2020 , Month .FEBRUARY , 29 , 23 , 59 , 59 , 999_999_999 )
148
+ assertNotNull(validDateTime2)
149
+ assertEquals(2020 , validDateTime2!! .year)
150
+ assertEquals(Month .FEBRUARY , validDateTime2.month)
151
+ assertEquals(29 , validDateTime2.day)
152
+ assertEquals(23 , validDateTime2.hour)
153
+ assertEquals(59 , validDateTime2.minute)
154
+ assertEquals(59 , validDateTime2.second)
155
+ assertEquals(999_999_999 , validDateTime2.nanosecond)
156
+
157
+ // Test createOrNull with LocalDate and LocalTime
158
+ val date = LocalDate (2020 , 1 , 1 )
159
+ val time = LocalTime (12 , 30 , 45 , 500_000_000 )
160
+ val validDateTime3 = LocalDateTime .createOrNull(date, time)
161
+ assertNotNull(validDateTime3)
162
+ assertEquals(date, validDateTime3!! .date)
163
+ assertEquals(time, validDateTime3.time)
164
+
165
+ // Test invalid date components
166
+ assertNull(LocalDateTime .createOrNull(2021 , 2 , 29 , 12 , 30 )) // Invalid day (not a leap year)
167
+ assertNull(LocalDateTime .createOrNull(2020 , 13 , 1 , 12 , 30 )) // Invalid month
168
+ assertNull(LocalDateTime .createOrNull(2020 , 0 , 1 , 12 , 30 )) // Invalid month
169
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 32 , 12 , 30 )) // Invalid day
170
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 0 , 12 , 30 )) // Invalid day
171
+
172
+ // Test invalid time components
173
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , - 1 , 30 )) // Invalid hour
174
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 24 , 30 )) // Invalid hour
175
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , - 1 )) // Invalid minute
176
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , 60 )) // Invalid minute
177
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , 30 , - 1 )) // Invalid second
178
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , 30 , 60 )) // Invalid second
179
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , 30 , 45 , - 1 )) // Invalid nanosecond
180
+ assertNull(LocalDateTime .createOrNull(2020 , 1 , 1 , 12 , 30 , 45 , 1_000_000_000 )) // Invalid nanosecond
181
+
182
+ // Test with Month enum
183
+ assertNull(LocalDateTime .createOrNull(2021 , Month .FEBRUARY , 29 , 12 , 30 )) // Invalid day (not a leap year)
184
+ assertNull(LocalDateTime .createOrNull(2020 , Month .FEBRUARY , 30 , 12 , 30 )) // Invalid day for February
185
+
186
+ // Test with null LocalDate or LocalTime
187
+ assertNull(LocalDateTime .createOrNull(null , time))
188
+ assertNull(LocalDateTime .createOrNull(date, null ))
189
+ assertNull(LocalDateTime .createOrNull(null , null ))
190
+ }
191
+
133
192
}
134
193
135
194
fun checkComponents (value : LocalDateTime , year : Int , month : Int , day : Int , hour : Int , minute : Int , second : Int = 0, nanosecond : Int = 0, dayOfWeek : Int? = null, dayOfYear : Int? = null) {
0 commit comments