Skip to content

Commit 87302e5

Browse files
committed
add array support
1 parent dcbd38b commit 87302e5

3 files changed

Lines changed: 61 additions & 0 deletions

File tree

src/main/java/it/aboutbits/springboot/testing/validation/source/SizeGreaterThanValueSource.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import it.aboutbits.springboot.testing.validation.core.ValueSource;
44
import lombok.NonNull;
55

6+
import java.lang.reflect.Array;
67
import java.util.ArrayList;
78
import java.util.Collection;
89
import java.util.HashMap;
@@ -41,6 +42,10 @@ public static void registerType(Class<?> type, LongFunction<Stream<?>> source) {
4142
public <T> Stream<T> values(Class<T> propertyClass, Object... args) {
4243
var value = (Long.valueOf((long) args[0]));
4344

45+
if (propertyClass.isArray()) {
46+
return (Stream<T>) arrayFunction(propertyClass, value);
47+
}
48+
4449
var sourceFunction = TYPE_SOURCES.get(propertyClass);
4550
if (sourceFunction != null) {
4651
return (Stream<T>) sourceFunction.apply(value);
@@ -49,6 +54,17 @@ public <T> Stream<T> values(Class<T> propertyClass, Object... args) {
4954
throw new IllegalArgumentException("Property class not supported!");
5055
}
5156

57+
private static Stream<?> arrayFunction(Class<?> arrayClass, long value) {
58+
59+
return getTestSizes(value)
60+
.stream()
61+
.map(size -> generateArray(
62+
Math.toIntExact(size),
63+
arrayClass
64+
));
65+
66+
}
67+
5268
@NonNull
5369
private static Stream<String> getStringStream(long value) {
5470
return getTestSizes(value)
@@ -120,4 +136,8 @@ private static Collection<Object> generateCollection(int size, Collection<Object
120136
return collection;
121137
}
122138

139+
private static Object generateArray(int size, Class<?> arrayClass) {
140+
var componentType = arrayClass.getComponentType();
141+
return Array.newInstance(componentType, size);
142+
}
123143
}

src/main/java/it/aboutbits/springboot/testing/validation/source/SizeLessThanValueSource.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import it.aboutbits.springboot.testing.validation.core.ValueSource;
44
import lombok.NonNull;
55

6+
import java.lang.reflect.Array;
67
import java.util.ArrayList;
78
import java.util.Collection;
89
import java.util.HashMap;
@@ -49,6 +50,10 @@ public <T> Stream<T> values(Class<T> propertyClass, Object... args) {
4950
throw new IllegalArgumentException("Value must be positive or zero. A size cannot be less than empty.");
5051
}
5152

53+
if (propertyClass.isArray()) {
54+
return (Stream<T>) arrayFunction(propertyClass, value);
55+
}
56+
5257
var sourceFunction = TYPE_SOURCES.get(propertyClass);
5358
if (sourceFunction != null) {
5459
return (Stream<T>) sourceFunction.apply(value);
@@ -57,6 +62,17 @@ public <T> Stream<T> values(Class<T> propertyClass, Object... args) {
5762
throw new IllegalArgumentException("Property class not supported!");
5863
}
5964

65+
private static Stream<?> arrayFunction(Class<?> arrayClass, long value) {
66+
return Stream.concat(
67+
Stream.of(generateArray(0, arrayClass)),
68+
Stream.iterate(1L, i -> i < value, i -> i + 1)
69+
.map(size -> generateArray(
70+
Math.toIntExact(size),
71+
arrayClass
72+
))
73+
);
74+
}
75+
6076
@NonNull
6177
private static Stream<String> getStringStream(long value) {
6278
return Stream.concat(
@@ -127,4 +143,9 @@ private static Collection<Object> generateCollection(int size, Collection<Object
127143
}
128144
return collection;
129145
}
146+
147+
private static Object generateArray(int size, Class<?> arrayClass) {
148+
var componentType = arrayClass.getComponentType();
149+
return Array.newInstance(componentType, size);
150+
}
130151
}

src/test/java/it/aboutbits/springboot/testing/validation/ValidationAssertTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,17 @@ public record SomeValidParameter(
157157
// Size - Min
158158
@Size(min = 3) String minSizeString,
159159
@Size(min = 3) Set<UUID> minSizeCollection,
160+
@Size(min = 3) UUID[] minSizeArray,
160161

161162
// Size - Max
162163
@Size(max = 10) String maxSizeString,
163164
@Size(max = 10) Collection<String> maxSizeCollection,
165+
@Size(max = 10) String[] maxSizeArray,
164166

165167
// Size - Min/Max
166168
@Size(min = 2, max = 8) String minMaxSizeString,
167169
@Size(min = 2, max = 8) Collection<String> minMaxSizeCollection,
170+
@Size(min = 2, max = 8) String[] minMaxSizeArray,
168171

169172
// Nullable
170173
@Nullable Object nullable,
@@ -293,14 +296,17 @@ void testWithBeanValidation() {
293296
// Size - Min
294297
.size("minSizeString").min(3)
295298
.size("minSizeCollection").min(3)
299+
.size("minSizeArray").min(3)
296300

297301
// Size - Max
298302
.size("maxSizeString").max(10)
299303
.size("maxSizeCollection").max(10)
304+
.size("maxSizeArray").max(10)
300305

301306
// Size - Min/Max
302307
.size("minMaxSizeString").minMax(2, 8)
303308
.size("minMaxSizeCollection").minMax(2, 8)
309+
.size("minMaxSizeArray").minMax(2, 8)
304310

305311
// Nullable
306312
.nullable("nullable")
@@ -430,14 +436,17 @@ void invalidParameter_shouldFail() {
430436
// Size - Min
431437
.size("minSizeString").min(3)
432438
.size("minSizeCollection").min(3)
439+
.size("minSizeArray").min(3)
433440

434441
// Size - Max
435442
.size("maxSizeString").max(10)
436443
.size("maxSizeCollection").max(10)
444+
.size("maxSizeArray").max(10)
437445

438446
// Size - Min/Max
439447
.size("minMaxSizeString").minMax(2, 8)
440448
.size("minMaxSizeCollection").minMax(2, 8)
449+
.size("minMaxSizeArray").minMax(2, 8)
441450

442451
// Nullable
443452
.nullable("nullable")
@@ -565,14 +574,17 @@ void propertyMissingRule_shouldFail() {
565574
// Size - Min
566575
.size("minSizeString").min(3)
567576
.size("minSizeCollection").min(3)
577+
.size("minSizeArray").min(3)
568578

569579
// Size - Max
570580
.size("maxSizeString").max(10)
571581
.size("maxSizeCollection").max(10)
582+
.size("maxSizeArray").max(10)
572583

573584
// Size - Min/Max
574585
.size("minMaxSizeString").minMax(2, 8)
575586
.size("minMaxSizeCollection").minMax(2, 8)
587+
.size("minMaxSizeArray").minMax(2, 8)
576588

577589
// Nullable
578590
.nullable("nullable")
@@ -834,14 +846,22 @@ private static SomeValidParameter getSomeValidParameter() {
834846
UUID.randomUUID(),
835847
UUID.randomUUID()
836848
), // 4 elements, > 3 min
849+
new UUID[]{
850+
UUID.randomUUID(),
851+
UUID.randomUUID(),
852+
UUID.randomUUID(),
853+
UUID.randomUUID()
854+
}, // 4 elements, > 3 min
837855

838856
// Size - Max
839857
"small", // 5 characters, < 10 max
840858
List.of("a", "b", "c"), // 3 elements, < 10 max
859+
new String[]{"a", "b", "c"}, // 3 elements, < 10 max
841860

842861
// Size - Min/Max
843862
"medium", // 6 characters, between 2-8
844863
List.of("a", "b", "c", "d", "e"), // 5 elements, between 2-8
864+
new String[]{"a", "b", "c", "d", "e"}, // 5 elements, between 2-8
845865

846866
// Nullable
847867
null,

0 commit comments

Comments
 (0)