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