1+ package com .baeldung .datetimeparseexception ;
2+
3+ import org .junit .jupiter .api .Test ;
4+
5+ import java .time .*;
6+ import java .time .format .DateTimeFormatter ;
7+ import java .time .temporal .TemporalAccessor ;
8+
9+ import static org .junit .jupiter .api .Assertions .*;
10+
11+ public class DateTimeParseExceptionUnitTest {
12+
13+ // Failing Test: Trying to obtain LocalDateTime from a date without time
14+ @ Test
15+ void givenDateWithoutTime_whenParsedAsLocalDateTime_thenThrowsDateTimeParseException () {
16+ String dateStr = "2024-03-25" ;
17+ DateTimeFormatter formatter = DateTimeFormatter .ISO_LOCAL_DATE ;
18+ TemporalAccessor parsedDate = formatter .parse (dateStr );
19+
20+ DateTimeException exception = assertThrows (DateTimeException .class , () ->
21+ LocalDateTime .from (parsedDate )
22+ );
23+
24+ assertTrue (exception .getMessage ().contains ("Unable to obtain LocalDateTime from TemporalAccessor" ));
25+ }
26+
27+ // Fixed Version: Correctly using LocalDate
28+ @ Test
29+ void givenDateWithoutTime_whenParsedAsLocalDate_thenSucceeds () {
30+ String dateStr = "2024-03-25" ;
31+ DateTimeFormatter formatter = DateTimeFormatter .ISO_LOCAL_DATE ;
32+ LocalDate date = LocalDate .parse (dateStr , formatter );
33+
34+ assertEquals (LocalDate .of (2024 , 3 , 25 ), date );
35+ }
36+
37+ // Fixed Version: Correctly using LocalDateTime with default time
38+ @ Test
39+ void givenDateWithTime_whenParsedAsLocalDateTime_thenSucceeds () {
40+ String dateTimeStr = "2024-03-25T00:00:00" ;
41+ DateTimeFormatter formatter = DateTimeFormatter .ISO_LOCAL_DATE_TIME ;
42+ LocalDateTime dateTime = LocalDateTime .parse (dateTimeStr , formatter );
43+
44+ assertEquals (LocalDateTime .of (2024 , 3 , 25 , 0 , 0 , 0 ), dateTime );
45+ }
46+
47+ // Failing Test: Trying to obtain LocalDateTime from DayOfWeek
48+ @ Test
49+ void givenDayOfWeek_whenParsedAsLocalDateTime_thenThrowsDateTimeParseException () {
50+ TemporalAccessor parsedDate = DayOfWeek .FRIDAY ;
51+
52+ DateTimeException exception = assertThrows (DateTimeException .class , () ->
53+ LocalDateTime .from (parsedDate )
54+ );
55+
56+ assertTrue (exception .getMessage ().contains ("Unable to obtain LocalDateTime from TemporalAccessor" ));
57+ }
58+
59+ // Fixed Version: Correctly using DayOfWeek
60+ @ Test
61+ void givenDayOfWeek_whenUsedAsIs_thenSucceeds () {
62+ DayOfWeek day = DayOfWeek .FRIDAY ;
63+
64+ assertEquals (DayOfWeek .FRIDAY , day );
65+ }
66+
67+ // Fixed Version: Combine DayOfWeek with LocalDate and LocalTime
68+ @ Test
69+ void givenDayOfWeek_whenCombinedWithLocalDateAndLocalTime_thenSucceeds () {
70+ LocalDate date = LocalDate .of (2024 , 3 , 25 ); // Specific date
71+ LocalTime time = LocalTime .of (14 , 30 ); // Set a specific time
72+ LocalDateTime dateTime = LocalDateTime .of (date , time );
73+
74+ assertEquals (LocalDateTime .of (2024 , 3 , 25 , 14 , 30 ), dateTime );
75+ }
76+
77+ // Failing Test: Trying to obtain LocalDateTime from LocalTime
78+ @ Test
79+ void givenLocalTime_whenParsedAsLocalDateTime_thenThrowsDateTimeParseException () {
80+ DateTimeFormatter formatter = DateTimeFormatter .ISO_LOCAL_TIME ;
81+ TemporalAccessor parsedDate = formatter .parse ("14:30:00" );
82+
83+ DateTimeException exception = assertThrows (DateTimeException .class , () ->
84+ LocalDateTime .from (parsedDate )
85+ );
86+
87+ assertTrue (exception .getMessage ().contains ("Unable to obtain LocalDateTime from TemporalAccessor" ));
88+ }
89+
90+ // Fixed Version: Combine LocalTime with LocalDate to form a valid LocalDateTime
91+ @ Test
92+ void givenLocalTime_whenCombinedWithLocalDate_thenSucceeds () {
93+ LocalDate date = LocalDate .of (2024 , 3 , 25 );
94+ LocalTime time = LocalTime .parse ("14:30:00" );
95+ LocalDateTime dateTime = LocalDateTime .of (date , time );
96+
97+ assertNotNull (dateTime );
98+ assertEquals (LocalDateTime .of (2024 , 3 , 25 , 14 , 30 ), dateTime );
99+ }
100+
101+ // Failing Test: Trying to obtain LocalDateTime from YearMonth
102+ @ Test
103+ void givenYearMonth_whenParsedAsLocalDateTime_thenThrowsDateTimeParseException () {
104+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyy-MM" );
105+ TemporalAccessor parsedDate = formatter .parse ("2024-03" );
106+
107+ DateTimeException exception = assertThrows (DateTimeException .class , () ->
108+ LocalDateTime .from (parsedDate )
109+ );
110+
111+ assertTrue (exception .getMessage ().contains ("Unable to obtain LocalDateTime from TemporalAccessor" ));
112+ }
113+
114+ // Fixed Version: Correctly using YearMonth
115+ @ Test
116+ void givenYearMonth_whenParsedCorrectly_thenSucceeds () {
117+ YearMonth yearMonth = YearMonth .parse ("2024-03" , DateTimeFormatter .ofPattern ("yyyy-MM" ));
118+ assertEquals (YearMonth .of (2024 , 3 ), yearMonth );
119+ }
120+
121+ // Failing Test: Trying to obtain LocalDateTime from MonthDay
122+ @ Test
123+ void givenMonthDay_whenParsedAsLocalDateTime_thenThrowsDateTimeParseException () {
124+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("MM-dd" );
125+ TemporalAccessor parsedDate = formatter .parse ("03-25" );
126+
127+ DateTimeException exception = assertThrows (DateTimeException .class , () ->
128+ LocalDateTime .from (parsedDate )
129+ );
130+
131+ assertTrue (exception .getMessage ().contains ("Unable to obtain LocalDateTime from TemporalAccessor" ));
132+ }
133+
134+ // Fixed Version: Correctly using MonthDay
135+ @ Test
136+ void givenMonthDay_whenParsedCorrectly_thenSucceeds () {
137+ MonthDay monthDay = MonthDay .parse ("03-25" , DateTimeFormatter .ofPattern ("MM-dd" ));
138+ assertEquals (MonthDay .of (3 , 25 ), monthDay );
139+ }
140+
141+ // Fixed Version: Combine MonthDay with LocalDate and LocalTime
142+ @ Test
143+ void givenMonthDay_whenCombinedWithYearAndTime_thenSucceeds () {
144+ MonthDay monthDay = MonthDay .parse ("03-25" , DateTimeFormatter .ofPattern ("MM-dd" ));
145+ LocalDate date = LocalDate .of (2024 , monthDay .getMonth (), monthDay .getDayOfMonth ());
146+ LocalTime time = LocalTime .of (14 , 30 );
147+ LocalDateTime dateTime = LocalDateTime .of (date , time );
148+
149+ assertNotNull (dateTime );
150+ assertEquals (LocalDateTime .of (2024 , 3 , 25 , 14 , 30 ), dateTime );
151+ }
152+ }
0 commit comments