@@ -130,6 +130,65 @@ class LocalDateTimeTest {
130130 assertFailsWith<IllegalArgumentException > { localTime(0 , 0 , 0 , 1_000_000_000 ) }
131131 }
132132
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+
133192}
134193
135194fun 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