test: wrote partial EventDeserializer test

This commit is contained in:
Yannik Bretschneider 2021-05-13 16:11:13 +02:00
parent 3929bde062
commit 156677f290

View File

@ -0,0 +1,190 @@
package uulm.teamname.marvelous.gamelibrary.json.ingame;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character;
import uulm.teamname.marvelous.gamelibrary.events.Event;
import uulm.teamname.marvelous.gamelibrary.events.EventType;
import uulm.teamname.marvelous.gamelibrary.events.GamestateEvent;
import uulm.teamname.marvelous.gamelibrary.events.NotificationEvent;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
class EventDeserializerTest {
ObjectMapper mapper;
@BeforeEach
void beforeEach() {
mapper = new ObjectMapper();
}
@Test
void NotificationEventTest() throws JsonProcessingException {
var ack = new GamestateEvent();
ack.type = EventType.Ack;
var jsonRepresentingAck = "{\"eventType\": \"Ack\"}";
assertThat((GamestateEvent) mapper.readValue(jsonRepresentingAck, Event.class))
.withFailMessage("Ack was not properly deserialized")
.isEqualTo(ack);
var nack = new GamestateEvent();
nack.type = EventType.Nack;
var jsonRepresentingNack = "{\"eventType\": \"Nack\"}";
assertThat((GamestateEvent) mapper.readValue(jsonRepresentingNack, Event.class))
.withFailMessage("Nack was not properly deserialized")
.isEqualTo(nack);
}
@Test
void GamestateEventTest() throws JsonProcessingException {
var characterAlpha = new Character(
new EntityID(EntityType.P1, 4),
new IntVector2(5, 3),
"Alpha",
210,
9,
3,
-1, // still -1 because no gameConfig object available
-1,
-1);
characterAlpha.inventory.addStone(StoneType.valueOf(1));
characterAlpha.inventory.addStone(StoneType.valueOf(4));
characterAlpha.setPosition(new IntVector2(4, 2));
var characterSteelWall = new Character(
new EntityID(EntityType.P1, 4),
new IntVector2(255, 0),
"Steel Wall",
123,
2,
21,
-1, // still -1 because no gameConfig object available
-1,
-1);
characterSteelWall.setPosition(new IntVector2(6, 7));
var infinityStone = new InfinityStone(
new EntityID(EntityType.InfinityStones, 3),
new IntVector2(52, 13),
StoneType.valueOf(3));
infinityStone.setPosition(new IntVector2(7, 22));
var rock = new Rock(
new EntityID(EntityType.Rocks, 15),
new IntVector2(51, 31),
195);
rock.setPosition(new IntVector2(4, 285));
var gamestate = new GamestateEvent();
gamestate.type = EventType.GamestateEvent;
gamestate.entities = new Entity[] {
characterAlpha,
characterSteelWall,
infinityStone,
rock
};
gamestate.mapSize = new IntVector2(15, 300);
gamestate.activeCharacter = new EntityID(EntityType.P2, 3);
gamestate.stoneCooldowns = new Integer[] {1, 1, 3, 1, 4, 2};
gamestate.turnOrder = new EntityID[] {
new EntityID(EntityType.P1, 5),
new EntityID(EntityType.P1, 4),
new EntityID(EntityType.P1, 3),
new EntityID(EntityType.P1, 2),
new EntityID(EntityType.P1, 1),
new EntityID(EntityType.P1, 0),
new EntityID(EntityType.P2, 0),
new EntityID(EntityType.P2, 1),
new EntityID(EntityType.P2, 2),
new EntityID(EntityType.P2, 3),
new EntityID(EntityType.P2, 4),
new EntityID(EntityType.P2, 5),
};
gamestate.winCondition = true;
var jsonRepresentingGamestate = """
{
"eventType": "GamestateEvent",
"entities": [
{
"entityType": "Character",
"Name": "Alpha",
"PID": 1,
"ID": 4,
"HP": 210,
"MP": 9,
"AP": 3,
"Stones": [1, 4],
"position": [4, 2]
},
{
"entityType": "Character",
"Name": "Steel Wall",
"PID": 1,
"ID": 4,
"HP": 123,
"MP": 2,
"AP": 21,
"Stones": [],
"position": [6, 7]
},
{
"entityType": "InfinityStone",
"ID": 3,
"position": [7, 22]
},
{
"entityType": "Rock",
"ID": 15,
"HP": 195,
"position": [4, 285]
}
],
"turnOrder": [
{"entityID": "P1", "ID": 5},
{"entityID": "P1", "ID": 4},
{"entityID": "P1", "ID": 3},
{"entityID": "P1", "ID": 2},
{"entityID": "P1", "ID": 1},
{"entityID": "P1", "ID": 0},
{"entityID": "P2", "ID": 0},
{"entityID": "P2", "ID": 1},
{"entityID": "P2", "ID": 2},
{"entityID": "P2", "ID": 3},
{"entityID": "P2", "ID": 4}
],
"mapSize": [15, 300],
"activeCharacter": {"entityID": "P2", "ID": 3},
"stoneCooldowns": [1, 1, 3, 1, 4, 2],
"winCondition": true
}
""";
assertThat((GamestateEvent) mapper.readValue(jsonRepresentingGamestate, GamestateEvent.class))
.withFailMessage("GamestateEvent was not properly deserialized")
.isEqualTo(gamestate);
}
}