Skip to content

Commit 1e41e35

Browse files
cigalymbladel
andcommitted
HHH-18532 Test cases checking that value is unwrapped to requested type
Co-authored-by: Marco Belladelli <[email protected]>
1 parent 626db6d commit 1e41e35

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.mapping.type.java;
6+
7+
import java.sql.Time;
8+
import java.sql.Timestamp;
9+
import java.time.Instant;
10+
import java.time.LocalDate;
11+
import java.time.LocalDateTime;
12+
import java.time.LocalTime;
13+
import java.time.OffsetDateTime;
14+
import java.time.OffsetTime;
15+
import java.time.ZonedDateTime;
16+
import java.util.Calendar;
17+
import java.util.Date;
18+
19+
import org.hibernate.HibernateException;
20+
import org.hibernate.type.descriptor.WrapperOptions;
21+
import org.hibernate.type.descriptor.java.CalendarDateJavaType;
22+
import org.hibernate.type.descriptor.java.CalendarJavaType;
23+
import org.hibernate.type.descriptor.java.CalendarTimeJavaType;
24+
import org.hibernate.type.descriptor.java.DateJavaType;
25+
import org.hibernate.type.descriptor.java.InstantJavaType;
26+
import org.hibernate.type.descriptor.java.JdbcDateJavaType;
27+
import org.hibernate.type.descriptor.java.JdbcTimeJavaType;
28+
import org.hibernate.type.descriptor.java.JdbcTimestampJavaType;
29+
import org.hibernate.type.descriptor.java.LocalDateJavaType;
30+
import org.hibernate.type.descriptor.java.LocalDateTimeJavaType;
31+
import org.hibernate.type.descriptor.java.LocalTimeJavaType;
32+
import org.hibernate.type.descriptor.java.OffsetDateTimeJavaType;
33+
import org.hibernate.type.descriptor.java.OffsetTimeJavaType;
34+
import org.hibernate.type.descriptor.java.ZonedDateTimeJavaType;
35+
36+
import org.hibernate.testing.orm.junit.DomainModel;
37+
import org.hibernate.testing.orm.junit.SessionFactory;
38+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
39+
import org.junit.jupiter.api.Assertions;
40+
import org.junit.jupiter.api.Test;
41+
42+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
43+
import static org.junit.jupiter.api.Assertions.assertThrows;
44+
45+
@DomainModel
46+
@SessionFactory
47+
public class DateSubclassesUnwrapTest {
48+
@Test
49+
void testJdbcTimestampJavaType(SessionFactoryScope scope) {
50+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
51+
final JdbcTimestampJavaType javaType = JdbcTimestampJavaType.INSTANCE;
52+
final Date date = new Date();
53+
54+
assertInstanceOf( Timestamp.class, javaType.unwrap( date, Timestamp.class, wrapperOptions ) );
55+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( date, java.sql.Date.class, wrapperOptions ) );
56+
assertInstanceOf( Time.class, javaType.unwrap( date, Time.class, wrapperOptions ) );
57+
assertInstanceOf( Date.class, javaType.unwrap( date, Date.class, wrapperOptions ) );
58+
}
59+
60+
@Test
61+
void testJdbcDateJavaType(SessionFactoryScope scope) {
62+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
63+
final JdbcDateJavaType javaType = JdbcDateJavaType.INSTANCE;
64+
final Date date = new Date();
65+
66+
assertInstanceOf( Timestamp.class, javaType.unwrap( date, Timestamp.class, wrapperOptions ) );
67+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( date, java.sql.Date.class, wrapperOptions ) );
68+
assertThrows( IllegalArgumentException.class, () -> javaType.unwrap( date, Time.class, wrapperOptions ) );
69+
assertInstanceOf( Date.class, javaType.unwrap( date, Date.class, wrapperOptions ) );
70+
}
71+
72+
@Test
73+
void testJdbcTimeJavaType(SessionFactoryScope scope) {
74+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
75+
final JdbcTimeJavaType javaType = JdbcTimeJavaType.INSTANCE;
76+
final Date date = new Date();
77+
78+
assertInstanceOf( Timestamp.class, javaType.unwrap( date, Timestamp.class, wrapperOptions ) );
79+
Assertions.assertThrows(
80+
IllegalArgumentException.class,
81+
() -> javaType.unwrap( date, java.sql.Date.class, wrapperOptions )
82+
);
83+
assertInstanceOf( Time.class, javaType.unwrap( date, Time.class, wrapperOptions ) );
84+
assertInstanceOf( Date.class, javaType.unwrap( date, Date.class, wrapperOptions ) );
85+
}
86+
87+
@Test
88+
void testDateJavaType(SessionFactoryScope scope) {
89+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
90+
final DateJavaType javaType = DateJavaType.INSTANCE;
91+
final Date date = new Date();
92+
93+
assertInstanceOf( Timestamp.class, javaType.unwrap( date, Timestamp.class, wrapperOptions ) );
94+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( date, java.sql.Date.class, wrapperOptions ) );
95+
assertInstanceOf( Time.class, javaType.unwrap( date, Time.class, wrapperOptions ) );
96+
assertInstanceOf( Date.class, javaType.unwrap( date, Date.class, wrapperOptions ) );
97+
}
98+
99+
@Test
100+
void testInstantJavaType(SessionFactoryScope scope) {
101+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
102+
final InstantJavaType javaType = InstantJavaType.INSTANCE;
103+
final Instant instant = Instant.now();
104+
105+
assertInstanceOf( Timestamp.class, javaType.unwrap( instant, Timestamp.class, wrapperOptions ) );
106+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( instant, java.sql.Date.class, wrapperOptions ) );
107+
assertInstanceOf( Time.class, javaType.unwrap( instant, Time.class, wrapperOptions ) );
108+
assertInstanceOf( Date.class, javaType.unwrap( instant, Date.class, wrapperOptions ) );
109+
}
110+
111+
@Test
112+
void testLocalDateJavaType(SessionFactoryScope scope) {
113+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
114+
final LocalDateJavaType javaType = LocalDateJavaType.INSTANCE;
115+
final LocalDate date = LocalDate.now();
116+
117+
assertInstanceOf( Timestamp.class, javaType.unwrap( date, Timestamp.class, wrapperOptions ) );
118+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( date, java.sql.Date.class, wrapperOptions ) );
119+
assertThrows( HibernateException.class, () -> javaType.unwrap( date, Time.class, wrapperOptions ) );
120+
assertInstanceOf( Date.class, javaType.unwrap( date, Date.class, wrapperOptions ) );
121+
}
122+
123+
@Test
124+
void testLocalDateTimeJavaType(SessionFactoryScope scope) {
125+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
126+
final LocalDateTimeJavaType javaType = LocalDateTimeJavaType.INSTANCE;
127+
final LocalDateTime dateTime = LocalDateTime.now();
128+
129+
assertInstanceOf( Timestamp.class, javaType.unwrap( dateTime, Timestamp.class, wrapperOptions ) );
130+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( dateTime, java.sql.Date.class, wrapperOptions ) );
131+
assertInstanceOf( Time.class, javaType.unwrap( dateTime, Time.class, wrapperOptions ) );
132+
assertInstanceOf( Date.class, javaType.unwrap( dateTime, Date.class, wrapperOptions ) );
133+
}
134+
135+
@Test
136+
void testLocalTimeJavaType(SessionFactoryScope scope) {
137+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
138+
final LocalTimeJavaType javaType = LocalTimeJavaType.INSTANCE;
139+
final LocalTime time = LocalTime.now();
140+
141+
assertInstanceOf( Timestamp.class, javaType.unwrap( time, Timestamp.class, wrapperOptions ) );
142+
assertThrows( HibernateException.class, () -> javaType.unwrap( time, java.sql.Date.class, wrapperOptions ) );
143+
assertInstanceOf( Time.class, javaType.unwrap( time, Time.class, wrapperOptions ) );
144+
assertInstanceOf( Date.class, javaType.unwrap( time, Date.class, wrapperOptions ) );
145+
}
146+
147+
@Test
148+
void testOffsetDateTimeJavaType(SessionFactoryScope scope) {
149+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
150+
final OffsetDateTimeJavaType javaType = OffsetDateTimeJavaType.INSTANCE;
151+
final OffsetDateTime dateTime = OffsetDateTime.now();
152+
153+
assertInstanceOf( Timestamp.class, javaType.unwrap( dateTime, Timestamp.class, wrapperOptions ) );
154+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( dateTime, java.sql.Date.class, wrapperOptions ) );
155+
assertInstanceOf( Time.class, javaType.unwrap( dateTime, Time.class, wrapperOptions ) );
156+
assertInstanceOf( Date.class, javaType.unwrap( dateTime, Date.class, wrapperOptions ) );
157+
}
158+
159+
@Test
160+
void testOffsetTimeJavaType(SessionFactoryScope scope) {
161+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
162+
final OffsetTimeJavaType javaType = OffsetTimeJavaType.INSTANCE;
163+
final OffsetTime time = OffsetTime.now();
164+
165+
assertInstanceOf( Timestamp.class, javaType.unwrap( time, Timestamp.class, wrapperOptions ) );
166+
assertThrows( IllegalArgumentException.class,
167+
() -> javaType.unwrap( time, java.sql.Date.class, wrapperOptions ) );
168+
assertInstanceOf( Time.class, javaType.unwrap( time, Time.class, wrapperOptions ) );
169+
assertInstanceOf( Date.class, javaType.unwrap( time, Date.class, wrapperOptions ) );
170+
}
171+
172+
@Test
173+
void testZonedDateTimeJavaType(SessionFactoryScope scope) {
174+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
175+
final ZonedDateTimeJavaType javaType = ZonedDateTimeJavaType.INSTANCE;
176+
final ZonedDateTime dateTime = ZonedDateTime.now();
177+
178+
assertInstanceOf( Timestamp.class, javaType.unwrap( dateTime, Timestamp.class, wrapperOptions ) );
179+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( dateTime, java.sql.Date.class, wrapperOptions ) );
180+
assertInstanceOf( Time.class, javaType.unwrap( dateTime, Time.class, wrapperOptions ) );
181+
assertInstanceOf( Date.class, javaType.unwrap( dateTime, Date.class, wrapperOptions ) );
182+
}
183+
184+
@Test
185+
void testCalendarDateJavaType(SessionFactoryScope scope) {
186+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
187+
final CalendarDateJavaType javaType = CalendarDateJavaType.INSTANCE;
188+
final Calendar calendar = Calendar.getInstance();
189+
190+
assertInstanceOf( Timestamp.class, javaType.unwrap( calendar, Timestamp.class, wrapperOptions ) );
191+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( calendar, java.sql.Date.class, wrapperOptions ) );
192+
assertInstanceOf( Time.class, javaType.unwrap( calendar, Time.class, wrapperOptions ) );
193+
assertInstanceOf( Date.class, javaType.unwrap( calendar, Date.class, wrapperOptions ) );
194+
}
195+
196+
@Test
197+
void testCalendarJavaType(SessionFactoryScope scope) {
198+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
199+
final CalendarJavaType javaType = CalendarJavaType.INSTANCE;
200+
final Calendar calendar = Calendar.getInstance();
201+
202+
assertInstanceOf( Timestamp.class, javaType.unwrap( calendar, Timestamp.class, wrapperOptions ) );
203+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( calendar, java.sql.Date.class, wrapperOptions ) );
204+
assertInstanceOf( Time.class, javaType.unwrap( calendar, Time.class, wrapperOptions ) );
205+
assertInstanceOf( Date.class, javaType.unwrap( calendar, Date.class, wrapperOptions ) );
206+
}
207+
208+
@Test
209+
void testCalendarTimeJavaType(SessionFactoryScope scope) {
210+
final WrapperOptions wrapperOptions = scope.getSessionFactory().getWrapperOptions();
211+
final CalendarTimeJavaType javaType = CalendarTimeJavaType.INSTANCE;
212+
final Calendar calendar = Calendar.getInstance();
213+
214+
assertInstanceOf( Timestamp.class, javaType.unwrap( calendar, Timestamp.class, wrapperOptions ) );
215+
assertInstanceOf( java.sql.Date.class, javaType.unwrap( calendar, java.sql.Date.class, wrapperOptions ) );
216+
assertInstanceOf( Time.class, javaType.unwrap( calendar, Time.class, wrapperOptions ) );
217+
assertInstanceOf( Date.class, javaType.unwrap( calendar, Date.class, wrapperOptions ) );
218+
}
219+
}

0 commit comments

Comments
 (0)