Skip to content

Commit 48e3485

Browse files
blafondDavideD
authored andcommitted
[#1732] Array types test
1 parent 16d0f7e commit 48e3485

File tree

1 file changed

+260
-0
lines changed

1 file changed

+260
-0
lines changed
Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.types;
7+
8+
import java.math.BigDecimal;
9+
import java.math.BigInteger;
10+
import java.time.LocalDate;
11+
import java.time.LocalDateTime;
12+
import java.time.LocalTime;
13+
import java.time.Month;
14+
import java.util.Calendar;
15+
import java.util.Date;
16+
import java.util.Set;
17+
import java.util.UUID;
18+
import java.util.function.Consumer;
19+
20+
import org.hibernate.reactive.BaseReactiveTest;
21+
22+
23+
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.api.condition.DisabledIf;
25+
26+
import io.vertx.junit5.Timeout;
27+
import io.vertx.junit5.VertxTestContext;
28+
import jakarta.persistence.Column;
29+
import jakarta.persistence.Entity;
30+
import jakarta.persistence.GeneratedValue;
31+
import jakarta.persistence.Id;
32+
import jakarta.persistence.Table;
33+
34+
import static java.lang.Boolean.FALSE;
35+
import static java.lang.Boolean.TRUE;
36+
import static java.util.concurrent.TimeUnit.MINUTES;
37+
import static org.hibernate.reactive.containers.DatabaseConfiguration.DBType.ORACLE;
38+
import static org.hibernate.reactive.containers.DatabaseConfiguration.dbType;
39+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
40+
import static org.junit.jupiter.api.Assertions.assertEquals;
41+
import static org.junit.jupiter.api.Assertions.assertNotNull;
42+
43+
@Timeout(value = 10, timeUnit = MINUTES)
44+
@DisabledIf( "isNotSupported" )
45+
public class JavaTypesArrayTest extends BaseReactiveTest {
46+
47+
@Override
48+
protected Set<Class<?>> annotatedEntities() {
49+
return Set.of( Basic.class );
50+
}
51+
52+
public static boolean isNotSupported() {
53+
// Vert.x does not support arrays for Oracle
54+
return dbType() == ORACLE;
55+
}
56+
57+
private void testField(
58+
VertxTestContext context, Basic
59+
original, Consumer<Basic> consumer) {
60+
test( context, getSessionFactory()
61+
.withTransaction( s -> s.persist( original ) )
62+
.thenCompose( v -> getSessionFactory().withSession( s -> s
63+
.find( Basic.class, original.id )
64+
.thenAccept( found -> {
65+
assertNotNull( found );
66+
consumer.accept( found );
67+
} ) ) )
68+
);
69+
}
70+
71+
@Test
72+
public void testStringArrayType(VertxTestContext context) {
73+
Basic basic = new Basic();
74+
String[] dataArray = {"Hello world!", "Hello earth"};
75+
basic.stringArray = dataArray;
76+
77+
testField( context, basic, found -> assertArrayEquals( dataArray, found.stringArray ) );
78+
}
79+
80+
@Test
81+
public void testBooleanArrayType(VertxTestContext context) {
82+
Basic basic = new Basic();
83+
Boolean[] dataArray = {TRUE, FALSE, TRUE};
84+
basic.booleanArray = dataArray;
85+
86+
testField( context, basic, found -> assertArrayEquals( dataArray, found.booleanArray ) );
87+
}
88+
89+
@Test
90+
public void testIntegerArrayType(VertxTestContext context) {
91+
Basic basic = new Basic();
92+
Integer[] dataArray = {1, 2, 3};
93+
basic.integerArray = dataArray;
94+
95+
testField( context, basic, found -> assertArrayEquals( dataArray, found.integerArray ) );
96+
}
97+
98+
@Test
99+
public void testLongArrayType(VertxTestContext context) {
100+
Basic basic = new Basic();
101+
Long[] dataArray = {Long.MIN_VALUE, Long.MAX_VALUE, 3L};
102+
basic.longArray = dataArray;
103+
104+
testField( context, basic, found -> assertArrayEquals( dataArray, found.longArray ) );
105+
}
106+
107+
@Test
108+
public void testFloatArrayType(VertxTestContext context) {
109+
Basic basic = new Basic();
110+
Float[] dataArray = {12.562f, 13.562f};
111+
basic.floatArray = dataArray;
112+
113+
testField( context, basic, found -> assertArrayEquals( dataArray, found.floatArray ) );
114+
}
115+
116+
@Test
117+
public void testDoubleArrayType(VertxTestContext context) {
118+
Basic basic = new Basic();
119+
Double[] dataArray = {12.562d, 13.562d};
120+
basic.doubleArray = dataArray;
121+
122+
testField( context, basic, found -> assertArrayEquals( dataArray, found.doubleArray ) );
123+
}
124+
125+
@Test
126+
public void testUUIDArrayType(VertxTestContext context) {
127+
Basic basic = new Basic();
128+
UUID[] dataArray = {
129+
UUID.fromString( "123e4567-e89b-42d3-a456-556642440000" ),
130+
UUID.fromString( "123e4567-e89b-42d3-a456-556642440001" ),
131+
UUID.fromString( "123e4567-e89b-42d3-a456-556642440002" )
132+
};
133+
basic.uuidArray = dataArray;
134+
135+
testField( context, basic, found -> assertArrayEquals( dataArray, found.uuidArray ) );
136+
}
137+
138+
@Test
139+
public void testEnumArrayType(VertxTestContext context) {
140+
Basic basic = new Basic();
141+
AnEnum[] dataArray = {AnEnum.FOURTH, AnEnum.FIRST, AnEnum.THIRD};
142+
basic.enumArray = dataArray;
143+
144+
testField( context, basic, found -> assertArrayEquals( dataArray, found.enumArray ) );
145+
}
146+
147+
@Test
148+
public void testShortArrayType(VertxTestContext context) {
149+
Basic basic = new Basic();
150+
Short[] dataArray = {512, 112, null, 0};
151+
basic.shortArray = dataArray;
152+
153+
testField( context, basic, found -> assertArrayEquals( dataArray, found.shortArray ) );
154+
}
155+
156+
@Test
157+
public void testLocalDateArrayType(VertxTestContext context) {
158+
Basic basic = new Basic();
159+
LocalDate date1 = LocalDate.now();
160+
LocalDate[] dataArray = {
161+
date1.plusDays( 5 ),
162+
date1.plusMonths( 4 ),
163+
date1.plusYears( 3 )
164+
};
165+
basic.localDateArray = dataArray;
166+
167+
testField( context, basic, found -> assertArrayEquals( dataArray, found.localDateArray ) );
168+
}
169+
170+
@Test
171+
public void testDateArrayType(VertxTestContext context) {
172+
Basic basic = new Basic();
173+
Date[] dataArray = {Calendar.getInstance().getTime(), Calendar.getInstance().getTime()};
174+
basic.dateArray = dataArray;
175+
176+
testField( context, basic, found -> assertArrayEquals( dataArray, found.dateArray ) );
177+
}
178+
179+
@Test
180+
public void testLocalTimeArrayType(VertxTestContext context) {
181+
Basic basic = new Basic();
182+
LocalTime[] dataArray = {
183+
LocalTime.of( 0, 0, 0 ),
184+
LocalTime.of( 6, 15, 0 ),
185+
LocalTime.of( 12, 30, 0 ),
186+
LocalTime.of( 23, 59, 59 )
187+
};
188+
basic.localTimeArray = dataArray;
189+
190+
testField( context, basic, found -> assertArrayEquals( dataArray, found.localTimeArray ) );
191+
}
192+
193+
@Test
194+
public void testLocalDateTimeArrayType(VertxTestContext context) {
195+
Basic basic = new Basic();
196+
LocalDateTime[] dataArray = {
197+
// Unix epoch start if you're in the UK
198+
LocalDateTime.of( 1970, Month.JANUARY, 1, 0, 0, 0, 0 ),
199+
// pre-Y2K
200+
LocalDateTime.of( 1999, Month.DECEMBER, 31, 23, 59, 59, 0 ),
201+
// We survived! Why was anyone worried?
202+
LocalDateTime.of( 2000, Month.JANUARY, 1, 0, 0, 0, 0 ),
203+
// Silence will fall!
204+
LocalDateTime.of( 2010, Month.JUNE, 26, 20, 4, 0, 0 )
205+
};
206+
basic.localDateTimeArray = dataArray;
207+
208+
testField( context, basic, found -> assertArrayEquals( dataArray, found.localDateTimeArray ) );
209+
}
210+
211+
@Test
212+
public void testBigIntegerArrayType(VertxTestContext context) {
213+
Basic basic = new Basic();
214+
BigInteger[] dataArray = {BigInteger.TEN, BigInteger.ZERO};
215+
basic.bigIntegerArray = dataArray;
216+
217+
testField( context, basic, found -> assertArrayEquals( dataArray, found.bigIntegerArray ) );
218+
}
219+
220+
@Test
221+
public void testBigDecimalArrayType(VertxTestContext context) {
222+
Basic basic = new Basic();
223+
BigDecimal[] dataArray = {BigDecimal.valueOf( 123384967L ), BigDecimal.ZERO};
224+
basic.bigDecimalArray = dataArray;
225+
226+
testField( context, basic, found -> {
227+
assertEquals( dataArray.length, found.bigDecimalArray.length );
228+
assertEquals( dataArray[0].compareTo( found.bigDecimalArray[0] ), 0 );
229+
assertEquals( dataArray[1].compareTo( found.bigDecimalArray[1] ), 0 );
230+
} );
231+
}
232+
233+
@Entity(name = "Basic")
234+
@Table(name = "Basic")
235+
private static class Basic {
236+
@Id
237+
@GeneratedValue
238+
Integer id;
239+
String[] stringArray;
240+
Boolean[] booleanArray;
241+
242+
Integer[] integerArray;
243+
Long[] longArray;
244+
Float[] floatArray;
245+
Double[] doubleArray;
246+
UUID[] uuidArray;
247+
AnEnum[] enumArray;
248+
Short[] shortArray;
249+
Date[] dateArray;
250+
LocalDate[] localDateArray;
251+
LocalTime[] localTimeArray;
252+
LocalDateTime[] localDateTimeArray;
253+
@Column(length = 5000)
254+
BigInteger[] bigIntegerArray;
255+
@Column(length = 5000)
256+
BigDecimal[] bigDecimalArray;
257+
}
258+
259+
enum AnEnum {FIRST, SECOND, THIRD, FOURTH}
260+
}

0 commit comments

Comments
 (0)