Refactor SerializerSelectorTest

dev
Exlll 3 years ago
parent 96321dd682
commit 1c38f85177

@ -14,7 +14,7 @@ import static de.exlll.configlib.Validator.requireNonNull;
* *
* @param <T> the type of the component * @param <T> the type of the component
*/ */
interface TypeComponent<T extends AnnotatedElement> { sealed interface TypeComponent<T extends AnnotatedElement> {
/** /**
* Returns the component itself. * Returns the component itself.
* *

@ -1,16 +1,14 @@
package de.exlll.configlib; package de.exlll.configlib;
import de.exlll.configlib.Serializers.*; import de.exlll.configlib.Serializers.*;
import de.exlll.configlib.configurations.*;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource; import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mockito;
import java.awt.Point; import java.awt.Point;
import java.io.File; import java.io.File;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.net.URI; import java.net.URI;
@ -24,6 +22,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.function.Predicate;
import static de.exlll.configlib.TestUtils.*; import static de.exlll.configlib.TestUtils.*;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
@ -34,19 +33,27 @@ class SerializerSelectorTest {
private static final SerializerSelector SELECTOR = new SerializerSelector( private static final SerializerSelector SELECTOR = new SerializerSelector(
ConfigurationProperties.newBuilder().build() ConfigurationProperties.newBuilder().build()
); );
private static final SerializerSelector SELECTOR_POINT = new SerializerSelector(
ConfigurationProperties.newBuilder().addSerializer(Point.class, POINT_SERIALIZER).build()
);
private static TypeComponent<?> findByCondition(Predicate<Field> condition) {
for (Field field : ExampleConfigurationA2.class.getDeclaredFields()) {
if (condition.test(field))
return new TypeComponent.ConfigurationField(field);
}
throw new RuntimeException("missing field");
}
private static Type getGenericType(Class<?> cls, String fieldName) { private static TypeComponent<?> findByType(Class<?> type) {
Field ls = getField(cls, fieldName); return findByCondition(field -> field.getType() == type);
return ls.getGenericType();
} }
private static TypeComponent<?> comp(Type type) { private static TypeComponent<?> findByName(String name) {
TypeComponent<?> mock = Mockito.mock(TypeComponent.class); return findByCondition(field -> field.getName().equals(name));
Mockito.when(mock.genericType()).thenReturn(type);
return mock;
} }
private static TypeComponent<?> comp(Class<?> type, String fieldName) { private static TypeComponent<?> forField(Class<?> type, String fieldName) {
Field field = getField(type, fieldName); Field field = getField(type, fieldName);
return new TypeComponent.ConfigurationField(field); return new TypeComponent.ConfigurationField(field);
} }
@ -54,7 +61,7 @@ class SerializerSelectorTest {
@ParameterizedTest @ParameterizedTest
@ValueSource(classes = {boolean.class, Boolean.class}) @ValueSource(classes = {boolean.class, Boolean.class})
void selectSerializerBoolean(Class<?> cls) { void selectSerializerBoolean(Class<?> cls) {
Serializer<?, ?> serializer = SELECTOR.select(comp(cls)); Serializer<?, ?> serializer = SELECTOR.select(findByType(cls));
assertThat(serializer, instanceOf(BooleanSerializer.class)); assertThat(serializer, instanceOf(BooleanSerializer.class));
} }
@ -65,99 +72,98 @@ class SerializerSelectorTest {
float.class, Float.class, double.class, Double.class float.class, Float.class, double.class, Double.class
}) })
void selectSerializerNumber(Class<?> cls) { void selectSerializerNumber(Class<?> cls) {
NumberSerializer serializer = (NumberSerializer) SELECTOR.select(comp(cls)); NumberSerializer serializer = (NumberSerializer) SELECTOR.select(findByType(cls));
assertThat(serializer.getNumberClass(), equalTo(cls)); assertThat(serializer.getNumberClass(), equalTo(cls));
} }
@ParameterizedTest @ParameterizedTest
@ValueSource(classes = {char.class, Character.class}) @ValueSource(classes = {char.class, Character.class})
void selectSerializerChar(Class<?> cls) { void selectSerializerChar(Class<?> cls) {
Serializer<?, ?> serializer = SELECTOR.select(comp(cls)); Serializer<?, ?> serializer = SELECTOR.select(findByType(cls));
assertThat(serializer, instanceOf(CharacterSerializer.class)); assertThat(serializer, instanceOf(CharacterSerializer.class));
} }
@Test @Test
void selectSerializerString() { void selectSerializerString() {
Serializer<?, ?> serializer = SELECTOR.select(comp(String.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(String.class));
assertThat(serializer, instanceOf(StringSerializer.class)); assertThat(serializer, instanceOf(StringSerializer.class));
} }
@Test @Test
void selectSerializerBigInteger() { void selectSerializerBigInteger() {
Serializer<?, ?> serializer = SELECTOR.select(comp(BigInteger.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(BigInteger.class));
assertThat(serializer, instanceOf(BigIntegerSerializer.class)); assertThat(serializer, instanceOf(BigIntegerSerializer.class));
} }
@Test @Test
void selectSerializerBigDecimal() { void selectSerializerBigDecimal() {
Serializer<?, ?> serializer = SELECTOR.select(comp(BigDecimal.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(BigDecimal.class));
assertThat(serializer, instanceOf(BigDecimalSerializer.class)); assertThat(serializer, instanceOf(BigDecimalSerializer.class));
} }
@Test @Test
void selectSerializerLocalDate() { void selectSerializerLocalDate() {
Serializer<?, ?> serializer = SELECTOR.select(comp(LocalDate.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(LocalDate.class));
assertThat(serializer, instanceOf(LocalDateSerializer.class)); assertThat(serializer, instanceOf(LocalDateSerializer.class));
} }
@Test @Test
void selectSerializerLocalTime() { void selectSerializerLocalTime() {
Serializer<?, ?> serializer = SELECTOR.select(comp(LocalTime.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(LocalTime.class));
assertThat(serializer, instanceOf(LocalTimeSerializer.class)); assertThat(serializer, instanceOf(LocalTimeSerializer.class));
} }
@Test @Test
void selectSerializerLocalDateTime() { void selectSerializerLocalDateTime() {
Serializer<?, ?> serializer = SELECTOR.select(comp(LocalDateTime.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(LocalDateTime.class));
assertThat(serializer, instanceOf(LocalDateTimeSerializer.class)); assertThat(serializer, instanceOf(LocalDateTimeSerializer.class));
} }
@Test @Test
void selectSerializerInstant() { void selectSerializerInstant() {
Serializer<?, ?> serializer = SELECTOR.select(comp(Instant.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(Instant.class));
assertThat(serializer, instanceOf(InstantSerializer.class)); assertThat(serializer, instanceOf(InstantSerializer.class));
} }
@Test @Test
void selectSerializerUuid() { void selectSerializerUuid() {
Serializer<?, ?> serializer = SELECTOR.select(comp(UUID.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(UUID.class));
assertThat(serializer, instanceOf(UuidSerializer.class)); assertThat(serializer, instanceOf(UuidSerializer.class));
} }
@Test @Test
void selectSerializerFile() { void selectSerializerFile() {
Serializer<?, ?> serializer = SELECTOR.select(comp(File.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(File.class));
assertThat(serializer, instanceOf(FileSerializer.class)); assertThat(serializer, instanceOf(FileSerializer.class));
} }
@Test @Test
void selectSerializerPath() { void selectSerializerPath() {
Serializer<?, ?> serializer = SELECTOR.select(comp(Path.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(Path.class));
assertThat(serializer, instanceOf(PathSerializer.class)); assertThat(serializer, instanceOf(PathSerializer.class));
} }
@Test @Test
void selectSerializerUrl() { void selectSerializerUrl() {
Serializer<?, ?> serializer = SELECTOR.select(comp(URL.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(URL.class));
assertThat(serializer, instanceOf(UrlSerializer.class)); assertThat(serializer, instanceOf(UrlSerializer.class));
} }
@Test @Test
void selectSerializerUri() { void selectSerializerUri() {
Serializer<?, ?> serializer = SELECTOR.select(comp(URI.class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(URI.class));
assertThat(serializer, instanceOf(UriSerializer.class)); assertThat(serializer, instanceOf(UriSerializer.class));
} }
@Test @Test
void selectSerializerEnum() { void selectSerializerEnum() {
enum E {} EnumSerializer serializer = (EnumSerializer) SELECTOR.select(findByType(ExampleEnum.class));
EnumSerializer serializer = (EnumSerializer) SELECTOR.select(comp(E.class)); assertThat(serializer.getEnumCls(), equalTo(ExampleEnum.class));
assertThat(serializer.getEnumCls(), equalTo(E.class));
} }
@Test @Test
void selectSerializerArray() { void selectSerializerArray() {
var serializer = (ArraySerializer<?, ?>) SELECTOR.select(comp(String[][].class)); var serializer = (ArraySerializer<?, ?>) SELECTOR.select(findByType(String[][].class));
assertThat(serializer.getComponentType(), equalTo(String[].class)); assertThat(serializer.getComponentType(), equalTo(String[].class));
var elementSerializer = (ArraySerializer<?, ?>) serializer.getElementSerializer(); var elementSerializer = (ArraySerializer<?, ?>) serializer.getElementSerializer();
@ -167,81 +173,79 @@ class SerializerSelectorTest {
@Test @Test
void selectSerializerPrimitiveBooleanArray() { void selectSerializerPrimitiveBooleanArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(boolean[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(boolean[].class));
assertThat(serializer, instanceOf(PrimitiveBooleanArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveBooleanArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveCharacterArray() { void selectSerializerPrimitiveCharacterArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(char[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(char[].class));
assertThat(serializer, instanceOf(PrimitiveCharacterArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveCharacterArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveByteArray() { void selectSerializerPrimitiveByteArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(byte[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(byte[].class));
assertThat(serializer, instanceOf(PrimitiveByteArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveByteArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveShortArray() { void selectSerializerPrimitiveShortArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(short[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(short[].class));
assertThat(serializer, instanceOf(PrimitiveShortArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveShortArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveIntegerArray() { void selectSerializerPrimitiveIntegerArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(int[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(int[].class));
assertThat(serializer, instanceOf(PrimitiveIntegerArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveIntegerArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveLongArray() { void selectSerializerPrimitiveLongArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(long[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(long[].class));
assertThat(serializer, instanceOf(PrimitiveLongArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveLongArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveFloatArray() { void selectSerializerPrimitiveFloatArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(float[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(float[].class));
assertThat(serializer, instanceOf(PrimitiveFloatArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveFloatArraySerializer.class));
} }
@Test @Test
void selectSerializerPrimitiveDoubleArray() { void selectSerializerPrimitiveDoubleArray() {
Serializer<?, ?> serializer = SELECTOR.select(comp(double[].class)); Serializer<?, ?> serializer = SELECTOR.select(findByType(double[].class));
assertThat(serializer, instanceOf(PrimitiveDoubleArraySerializer.class)); assertThat(serializer, instanceOf(PrimitiveDoubleArraySerializer.class));
} }
@Test @Test
void selectSerializerConfiguration() { void selectSerializerConfiguration() {
@Configuration var serializer1 = (ConfigurationSerializer<?>) SELECTOR_POINT
class A<T> { .select(findByType(ExampleConfigurationB1.class));
int i; var serializer2 = (ConfigurationSerializer<?>) SELECTOR_POINT
} .select(findByType(ExampleConfigurationB2.class));
var serializer = (ConfigurationSerializer<?>) SELECTOR.select(comp(A.class)); assertThat(serializer1.getConfigurationType(), equalTo(ExampleConfigurationB1.class));
assertThat(serializer.getConfigurationType(), equalTo(A.class)); assertThat(serializer2.getConfigurationType(), equalTo(ExampleConfigurationB2.class));
} }
@Test @Test
void selectSerializerRecord() { void selectSerializerRecord() {
record R(int i) {} var serializer1 = (RecordSerializer<?>) SELECTOR_POINT
var serializer = (RecordSerializer<?>) SELECTOR.select(comp(R.class)); .select(findByType(ExampleRecord1.class));
assertThat(serializer.getRecordType(), equalTo(R.class)); var serializer2 = (RecordSerializer<?>) SELECTOR_POINT
} .select(findByType(ExampleRecord2.class));
assertThat(serializer1.getRecordType(), equalTo(ExampleRecord1.class));
@Test assertThat(serializer2.getRecordType(), equalTo(ExampleRecord2.class));
void recordSerializerTakesPrecedenceOverConfigurationSerializer() {
@Configuration
record R(int i) {}
var serializer = (RecordSerializer<?>) SELECTOR.select(comp(R.class));
assertThat(serializer.getRecordType(), equalTo(R.class));
} }
@Test @Test
void selectSerializerMissingType() { void selectSerializerMissingType() {
class A {
Object object;
}
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(Object.class)), () -> SELECTOR.select(forField(A.class, "object")),
"Missing serializer for type class java.lang.Object.\nEither annotate the type with " + "Missing serializer for type class java.lang.Object.\nEither annotate the type with " +
"@Configuration or provide a custom serializer by adding it to the properties." "@Configuration or provide a custom serializer by adding it to the properties."
); );
@ -249,11 +253,7 @@ class SerializerSelectorTest {
@Test @Test
void selectSerializerByCustomType() { void selectSerializerByCustomType() {
var properties = ConfigurationProperties.newBuilder() var pointSerializer = SELECTOR_POINT.select(findByType(Point.class));
.addSerializer(Point.class, POINT_SERIALIZER)
.build();
SerializerSelector selector = new SerializerSelector(properties);
var pointSerializer = selector.select(comp(Point.class));
assertThat(pointSerializer, sameInstance(POINT_SERIALIZER)); assertThat(pointSerializer, sameInstance(POINT_SERIALIZER));
} }
@ -263,7 +263,7 @@ class SerializerSelectorTest {
.addSerializer(BigInteger.class, CUSTOM_BIG_INTEGER_SERIALIZER) .addSerializer(BigInteger.class, CUSTOM_BIG_INTEGER_SERIALIZER)
.build(); .build();
SerializerSelector selector = new SerializerSelector(properties); SerializerSelector selector = new SerializerSelector(properties);
var bigIntegerSerializer = selector.select(comp(BigInteger.class)); var bigIntegerSerializer = selector.select(findByType(BigInteger.class));
assertThat(bigIntegerSerializer, instanceOf(TestUtils.CustomBigIntegerSerializer.class)); assertThat(bigIntegerSerializer, instanceOf(TestUtils.CustomBigIntegerSerializer.class));
assertThat(bigIntegerSerializer, sameInstance(CUSTOM_BIG_INTEGER_SERIALIZER)); assertThat(bigIntegerSerializer, sameInstance(CUSTOM_BIG_INTEGER_SERIALIZER));
} }
@ -274,7 +274,7 @@ class SerializerSelectorTest {
.addSerializerByCondition(t -> t == Point.class, POINT_SERIALIZER) .addSerializerByCondition(t -> t == Point.class, POINT_SERIALIZER)
.build(); .build();
SerializerSelector selector = new SerializerSelector(properties); SerializerSelector selector = new SerializerSelector(properties);
var pointSerializer = selector.select(comp(Point.class)); var pointSerializer = selector.select(findByType(Point.class));
assertThat(pointSerializer, sameInstance(POINT_SERIALIZER)); assertThat(pointSerializer, sameInstance(POINT_SERIALIZER));
} }
@ -284,7 +284,7 @@ class SerializerSelectorTest {
.addSerializerByCondition(t -> t == BigInteger.class, CUSTOM_BIG_INTEGER_SERIALIZER) .addSerializerByCondition(t -> t == BigInteger.class, CUSTOM_BIG_INTEGER_SERIALIZER)
.build(); .build();
SerializerSelector selector = new SerializerSelector(properties); SerializerSelector selector = new SerializerSelector(properties);
var bigIntegerSerializer = selector.select(comp(BigInteger.class)); var bigIntegerSerializer = selector.select(findByType(BigInteger.class));
assertThat(bigIntegerSerializer, instanceOf(TestUtils.CustomBigIntegerSerializer.class)); assertThat(bigIntegerSerializer, instanceOf(TestUtils.CustomBigIntegerSerializer.class));
assertThat(bigIntegerSerializer, sameInstance(CUSTOM_BIG_INTEGER_SERIALIZER)); assertThat(bigIntegerSerializer, sameInstance(CUSTOM_BIG_INTEGER_SERIALIZER));
} }
@ -298,17 +298,14 @@ class SerializerSelectorTest {
.addSerializer(int.class, serializer2) .addSerializer(int.class, serializer2)
.build(); .build();
SerializerSelector selector = new SerializerSelector(properties); SerializerSelector selector = new SerializerSelector(properties);
var serializer = selector.select(comp(int.class)); var serializer = selector.select(findByType(int.class));
assertThat(serializer, instanceOf(IdentifiableSerializer.class)); assertThat(serializer, instanceOf(IdentifiableSerializer.class));
assertThat(serializer, sameInstance(serializer2)); assertThat(serializer, sameInstance(serializer2));
} }
@Test @Test
void selectSerializerList() { void selectSerializerList() {
class A { var serializer = (ListSerializer<?, ?>) SELECTOR.select(findByName("a2_listString"));
List<String> ls;
}
var serializer = (ListSerializer<?, ?>) SELECTOR.select(comp(getGenericType(A.class, "ls")));
assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class));
} }
@ -317,41 +314,33 @@ class SerializerSelectorTest {
class A { class A {
List<List<String>> lls; List<List<String>> lls;
} }
var serializer = (ListSerializer<?, ?>) SELECTOR.select(comp(getGenericType(A.class, "lls"))); var serializer = (ListSerializer<?, ?>) SELECTOR.select(findByName("a2_listListByte"));
var elementSerializer = (ListSerializer<?, ?>) serializer.getElementSerializer(); var elementSerializer = (ListSerializer<?, ?>) serializer.getElementSerializer();
assertThat(elementSerializer.getElementSerializer(), instanceOf(StringSerializer.class)); var numberSerializer = (NumberSerializer) elementSerializer.getElementSerializer();
assertThat(numberSerializer.getNumberClass(), equalTo(Byte.class));
} }
@Test @Test
void selectSerializerSetsAsSets() { void selectSerializerSetsAsSets() {
class A {
Set<String> ss;
}
SerializerSelector selector = new SerializerSelector( SerializerSelector selector = new SerializerSelector(
ConfigurationProperties.newBuilder().serializeSetsAsLists(false).build() ConfigurationProperties.newBuilder().serializeSetsAsLists(false).build()
); );
var serializer = (SetSerializer<?, ?>) selector.select(comp(getGenericType(A.class, "ss"))); var serializer = (SetSerializer<?, ?>) selector.select(findByName("a2_setString"));
assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class));
} }
@Test @Test
void selectSerializerSetsAsLists() { void selectSerializerSetsAsLists() {
class A { var serializer = (SetAsListSerializer<?, ?>) SELECTOR.select(findByName("a2_setString"));
Set<String> ss;
}
var serializer = (SetAsListSerializer<?, ?>) SELECTOR.select(comp(getGenericType(A.class, "ss")));
assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class));
} }
@Test @Test
void selectSerializerMap() { void selectSerializerMap() {
class A { var serializer = (MapSerializer<?, ?, ?, ?>) SELECTOR_POINT.select(findByName("a2_mapStringR1"));
Map<Integer, String> mis; var stringSerializer = (StringSerializer) serializer.getKeySerializer();
} var recordSerializer = (RecordSerializer<?>) serializer.getValueSerializer();
var serializer = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(comp(getGenericType(A.class, "mis"))); assertThat(recordSerializer.getRecordType(), equalTo(ExampleRecord1.class));
var numberSerializer = (NumberSerializer) serializer.getKeySerializer();
assertThat(numberSerializer.getNumberClass(), equalTo(Integer.class));
assertThat(serializer.getValueSerializer(), instanceOf(StringSerializer.class));
} }
@Test @Test
@ -360,7 +349,7 @@ class SerializerSelectorTest {
class A { class A {
Map<E, Set<List<E>>> mesle; Map<E, Set<List<E>>> mesle;
} }
var serializer = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(comp(getGenericType(A.class, "mesle"))); var serializer = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(forField(A.class, "mesle"));
var keySerializer = (EnumSerializer) serializer.getKeySerializer(); var keySerializer = (EnumSerializer) serializer.getKeySerializer();
assertThat(keySerializer.getEnumCls(), equalTo(E.class)); assertThat(keySerializer.getEnumCls(), equalTo(E.class));
@ -376,11 +365,12 @@ class SerializerSelectorTest {
class A { class A {
Map<List<String>, String> mlss; Map<List<String>, String> mlss;
} }
Type type = getGenericType(A.class, "mlss"); TypeComponent<?> component = forField(A.class, "mlss");
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type '" + type + "'.\nMap keys can only be " + ("Cannot select serializer for type '%s'.\n" +
"of simple or enum type." "Map keys can only be of simple or enum type.")
.formatted(component.genericType())
); );
} }
@ -389,11 +379,12 @@ class SerializerSelectorTest {
class A { class A {
Map<Point, String> mps; Map<Point, String> mps;
} }
Type type = getGenericType(A.class, "mps"); TypeComponent<?> component = forField(A.class, "mps");
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type '" + type + "'.\nMap keys can only be " + ("Cannot select serializer for type '%s'.\n" +
"of simple or enum type." "Map keys can only be of simple or enum type.")
.formatted(component.genericType())
); );
} }
@ -403,11 +394,12 @@ class SerializerSelectorTest {
class A { class A {
Box<String> box; Box<String> box;
} }
Type type = getGenericType(A.class, "box"); TypeComponent<?> component = forField(A.class, "box");
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type '" + type + "'.\nParameterized " + ("Cannot select serializer for type '%s'.\n" +
"types other than lists, sets, and maps cannot be serialized." "Parameterized types other than lists, sets, and maps cannot be serialized.")
.formatted(component.genericType())
); );
} }
@ -416,9 +408,9 @@ class SerializerSelectorTest {
class A { class A {
List<?>[] ga; List<?>[] ga;
} }
Type type = getGenericType(A.class, "ga"); TypeComponent<?> component = forField(A.class, "ga");
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type 'java.util.List<?>[]'.\n" + "Cannot select serializer for type 'java.util.List<?>[]'.\n" +
"Generic array types cannot be serialized." "Generic array types cannot be serialized."
); );
@ -429,10 +421,9 @@ class SerializerSelectorTest {
class A { class A {
List<? extends String> les; List<? extends String> les;
} }
ParameterizedType ptype = (ParameterizedType) getGenericType(A.class, "les"); TypeComponent<?> component = forField(A.class, "les");
Type type = ptype.getActualTypeArguments()[0];
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type '? extends java.lang.String'.\n" + "Cannot select serializer for type '? extends java.lang.String'.\n" +
"Wildcard types cannot be serialized." "Wildcard types cannot be serialized."
); );
@ -443,10 +434,9 @@ class SerializerSelectorTest {
class A { class A {
List<?> lw; List<?> lw;
} }
ParameterizedType ptype = (ParameterizedType) getGenericType(A.class, "lw"); TypeComponent<?> component = forField(A.class, "lw");
Type type = ptype.getActualTypeArguments()[0];
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type '?'.\n" + "Cannot select serializer for type '?'.\n" +
"Wildcard types cannot be serialized." "Wildcard types cannot be serialized."
); );
@ -457,9 +447,9 @@ class SerializerSelectorTest {
class A<T> { class A<T> {
T t; T t;
} }
Type type = getGenericType(A.class, "t"); TypeComponent<?> component = forField(A.class, "t");
assertThrowsConfigurationException( assertThrowsConfigurationException(
() -> SELECTOR.select(comp(type)), () -> SELECTOR.select(component),
"Cannot select serializer for type 'T'.\n" + "Cannot select serializer for type 'T'.\n" +
"Type variables cannot be serialized." "Type variables cannot be serialized."
); );
@ -497,64 +487,64 @@ class SerializerSelectorTest {
@Test @Test
void selectCustomSerializerForField() { void selectCustomSerializerForField() {
var serializer = SELECTOR.select(comp(Z.class, "string")); var serializer = SELECTOR.select(forField(Z.class, "string"));
assertThat(serializer, instanceOf(IdentitySerializer.class)); assertThat(serializer, instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForListsWithNesting0() { void selectCustomSerializerForListsWithNesting0() {
var serializer = SELECTOR.select(comp(Z.class, "list1")); var serializer = SELECTOR.select(forField(Z.class, "list1"));
assertThat(serializer, instanceOf(IdentitySerializer.class)); assertThat(serializer, instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForListsWithNesting1() { void selectCustomSerializerForListsWithNesting1() {
var serializer = (ListSerializer<?, ?>) SELECTOR.select(comp(Z.class, "list2")); var serializer = (ListSerializer<?, ?>) SELECTOR.select(forField(Z.class, "list2"));
assertThat(serializer.getElementSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForListsWithNesting2() { void selectCustomSerializerForListsWithNesting2() {
var serializer1 = (ListSerializer<?, ?>) SELECTOR.select(comp(Z.class, "list3")); var serializer1 = (ListSerializer<?, ?>) SELECTOR.select(forField(Z.class, "list3"));
var serializer2 = (SetAsListSerializer<?, ?>) serializer1.getElementSerializer(); var serializer2 = (SetAsListSerializer<?, ?>) serializer1.getElementSerializer();
assertThat(serializer2.getElementSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer2.getElementSerializer(), instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForSetsWithNesting0() { void selectCustomSerializerForSetsWithNesting0() {
var serializer = SELECTOR.select(comp(Z.class, "set1")); var serializer = SELECTOR.select(forField(Z.class, "set1"));
assertThat(serializer, instanceOf(IdentitySerializer.class)); assertThat(serializer, instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForSetsWithNesting1() { void selectCustomSerializerForSetsWithNesting1() {
var serializer = (SetAsListSerializer<?, ?>) SELECTOR.select(comp(Z.class, "set2")); var serializer = (SetAsListSerializer<?, ?>) SELECTOR.select(forField(Z.class, "set2"));
assertThat(serializer.getElementSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForSetsWithNesting2() { void selectCustomSerializerForSetsWithNesting2() {
var serializer1 = (SetAsListSerializer<?, ?>) SELECTOR.select(comp(Z.class, "set3")); var serializer1 = (SetAsListSerializer<?, ?>) SELECTOR.select(forField(Z.class, "set3"));
var serializer2 = (ListSerializer<?, ?>) serializer1.getElementSerializer(); var serializer2 = (ListSerializer<?, ?>) serializer1.getElementSerializer();
assertThat(serializer2.getElementSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer2.getElementSerializer(), instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForMapsWithNesting0() { void selectCustomSerializerForMapsWithNesting0() {
var serializer = SELECTOR.select(comp(Z.class, "map1")); var serializer = SELECTOR.select(forField(Z.class, "map1"));
assertThat(serializer, instanceOf(IdentitySerializer.class)); assertThat(serializer, instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForMapsWithNesting1() { void selectCustomSerializerForMapsWithNesting1() {
var serializer = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(comp(Z.class, "map2")); var serializer = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(forField(Z.class, "map2"));
assertThat(serializer.getKeySerializer(), instanceOf(NumberSerializer.class)); assertThat(serializer.getKeySerializer(), instanceOf(NumberSerializer.class));
assertThat(serializer.getValueSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer.getValueSerializer(), instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForMapsWithNesting2() { void selectCustomSerializerForMapsWithNesting2() {
var serializer1 = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(comp(Z.class, "map3")); var serializer1 = (MapSerializer<?, ?, ?, ?>) SELECTOR.select(forField(Z.class, "map3"));
var serializer2 = (MapSerializer<?, ?, ?, ?>) serializer1.getValueSerializer(); var serializer2 = (MapSerializer<?, ?, ?, ?>) serializer1.getValueSerializer();
assertThat(serializer2.getKeySerializer(), instanceOf(StringSerializer.class)); assertThat(serializer2.getKeySerializer(), instanceOf(StringSerializer.class));
assertThat(serializer2.getValueSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer2.getValueSerializer(), instanceOf(IdentitySerializer.class));
@ -562,19 +552,19 @@ class SerializerSelectorTest {
@Test @Test
void selectCustomSerializerForArraysWithNesting0() { void selectCustomSerializerForArraysWithNesting0() {
var serializer = SELECTOR.select(comp(Z.class, "array1")); var serializer = SELECTOR.select(forField(Z.class, "array1"));
assertThat(serializer, instanceOf(IdentitySerializer.class)); assertThat(serializer, instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForArraysWithNesting1() { void selectCustomSerializerForArraysWithNesting1() {
var serializer = (ArraySerializer<?, ?>) SELECTOR.select(comp(Z.class, "array2")); var serializer = (ArraySerializer<?, ?>) SELECTOR.select(forField(Z.class, "array2"));
assertThat(serializer.getElementSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(IdentitySerializer.class));
} }
@Test @Test
void selectCustomSerializerForArraysWithNesting2() { void selectCustomSerializerForArraysWithNesting2() {
var serializer1 = (ArraySerializer<?, ?>) SELECTOR.select(comp(Z.class, "array3")); var serializer1 = (ArraySerializer<?, ?>) SELECTOR.select(forField(Z.class, "array3"));
var serializer2 = (ArraySerializer<?, ?>) serializer1.getElementSerializer(); var serializer2 = (ArraySerializer<?, ?>) serializer1.getElementSerializer();
assertThat(serializer2.getElementSerializer(), instanceOf(IdentitySerializer.class)); assertThat(serializer2.getElementSerializer(), instanceOf(IdentitySerializer.class));
} }
@ -591,10 +581,10 @@ class SerializerSelectorTest {
@SerializeWith(serializer = IdentitySerializer.class, nesting = 2) @SerializeWith(serializer = IdentitySerializer.class, nesting = 2)
List<String> list; List<String> list;
} }
assertThat(SELECTOR.select(comp(A.class, "s1")), instanceOf(StringSerializer.class)); assertThat(SELECTOR.select(forField(A.class, "s1")), instanceOf(StringSerializer.class));
assertThat(SELECTOR.select(comp(A.class, "s2")), instanceOf(IdentitySerializer.class)); assertThat(SELECTOR.select(forField(A.class, "s2")), instanceOf(IdentitySerializer.class));
assertThat(SELECTOR.select(comp(A.class, "s3")), instanceOf(StringSerializer.class)); assertThat(SELECTOR.select(forField(A.class, "s3")), instanceOf(StringSerializer.class));
var serializer = (ListSerializer<?, ?>) SELECTOR.select(comp(A.class, "list")); var serializer = (ListSerializer<?, ?>) SELECTOR.select(forField(A.class, "list"));
assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class)); assertThat(serializer.getElementSerializer(), instanceOf(StringSerializer.class));
} }
} }

Loading…
Cancel
Save