feat: implemented proper deserialization for EntityID and IntVector2
This commit is contained in:
parent
42e57daa54
commit
d0829f3948
@ -1,13 +1,16 @@
|
|||||||
package uulm.teamname.marvelous.gamelibrary;
|
package uulm.teamname.marvelous.gamelibrary;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
import uulm.teamname.marvelous.gamelibrary.json.ingame.IntVector2Deserializer;
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.IntVector2Deserializer;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.IntVector2Serializer;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/** Represents a 2d vector of integers. */
|
/** Represents a 2d vector of integers. */
|
||||||
@JsonDeserialize(using = IntVector2Deserializer.class)
|
@JsonDeserialize(using = IntVector2Deserializer.class)
|
||||||
|
@JsonSerialize(using = IntVector2Serializer.class)
|
||||||
public class IntVector2 implements Serializable {
|
public class IntVector2 implements Serializable {
|
||||||
private int x;
|
private int x;
|
||||||
private int y;
|
private int y;
|
||||||
|
@ -1,15 +1,18 @@
|
|||||||
package uulm.teamname.marvelous.gamelibrary.entities;
|
package uulm.teamname.marvelous.gamelibrary.entities;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import uulm.teamname.marvelous.gamelibrary.json.ingame.EntityIDDeserializer;
|
import uulm.teamname.marvelous.gamelibrary.json.ingame.EntityIDDeserializer;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/** Represents a distinct identification for every {@link Entity} in a game. */
|
/** Represents a distinct identification for every {@link Entity} in a game. */
|
||||||
|
@JsonPropertyOrder({"entityID", "ID"})
|
||||||
@JsonDeserialize(using = EntityIDDeserializer.class)
|
@JsonDeserialize(using = EntityIDDeserializer.class)
|
||||||
public class EntityID {
|
public class EntityID {
|
||||||
/** The index of the entity */
|
/** The index of the entity */
|
||||||
|
@JsonProperty("ID")
|
||||||
public final int id;
|
public final int id;
|
||||||
|
|
||||||
/** The type of the entity */
|
/** The type of the entity */
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package uulm.teamname.marvelous.gamelibrary.json.ingame;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||||
|
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class IntVector2Serializer extends StdSerializer<IntVector2> {
|
||||||
|
|
||||||
|
public IntVector2Serializer() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IntVector2Serializer(Class<IntVector2> t) {
|
||||||
|
super(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void serialize(IntVector2 value, JsonGenerator gen, SerializerProvider provider) throws IOException {
|
||||||
|
gen.writeStartArray();
|
||||||
|
gen.writeNumber(value.getX());
|
||||||
|
gen.writeNumber(value.getY());
|
||||||
|
gen.writeEndArray();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package uulm.teamname.marvelous.gamelibrary.json.ingame;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import net.jqwik.api.*;
|
||||||
|
import net.jqwik.api.lifecycle.BeforeProperty;
|
||||||
|
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
class IntVector2SerializerTest {
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
@BeforeProperty
|
||||||
|
void setup() {
|
||||||
|
mapper = new ObjectMapper();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Property
|
||||||
|
void vectorsGetProperlyDeserialized(@ForAll @From("positions") IntVector2 vector) throws JsonProcessingException {
|
||||||
|
var jsonRepresentingVector = String.format("[%d,%d]", vector.getX(), vector.getY());
|
||||||
|
assertThat(mapper.writeValueAsString(vector))
|
||||||
|
.isEqualTo(jsonRepresentingVector);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provide("positions")
|
||||||
|
Arbitrary<IntVector2> positions() {
|
||||||
|
return Arbitraries.integers()
|
||||||
|
.tuple2()
|
||||||
|
.map(pos -> new IntVector2(pos.get1(), pos.get2()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user