2021-05-11 04:14:18 +00:00
|
|
|
package uulm.teamname.marvelous.gamelibrary.json;
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
import org.junit.jupiter.api.AfterEach;
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
2021-05-13 14:10:51 +00:00
|
|
|
import org.junit.jupiter.api.Disabled;
|
2021-05-11 04:14:18 +00:00
|
|
|
import org.junit.jupiter.api.Test;
|
2021-05-30 16:07:05 +00:00
|
|
|
|
2021-05-11 04:14:18 +00:00
|
|
|
import static org.assertj.core.api.Assertions.*;
|
2021-06-03 21:08:11 +00:00
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
|
import static org.mockito.Mockito.when;
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.config.*;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.entities.*;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.entities.Character;
|
2021-05-11 04:14:18 +00:00
|
|
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.events.EventType;
|
2021-06-03 21:08:11 +00:00
|
|
|
import uulm.teamname.marvelous.gamelibrary.events.GamestateEvent;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.messages.AssignmentEnum;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.messages.BasicMessage;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.messages.ErrorMessage;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.messages.RoleEnum;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.messages.client.*;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.messages.server.*;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.requests.Request;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
|
|
|
|
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-05-30 16:07:05 +00:00
|
|
|
import java.util.*;
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-05-11 02:25:35 +00:00
|
|
|
class JSONTest {
|
2021-05-11 04:14:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2021-05-31 21:24:22 +00:00
|
|
|
JSON json;
|
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
CharacterConfig characterConfig;
|
|
|
|
HashMap<String, CharacterProperties> propertiesMap;
|
|
|
|
|
2021-05-31 21:24:22 +00:00
|
|
|
// TODO: add proper CharacterConfig, otherwise Character events won't be deserializable
|
2021-05-11 04:14:18 +00:00
|
|
|
@BeforeEach
|
|
|
|
void setUp() {
|
2021-06-03 21:08:11 +00:00
|
|
|
characterConfig = mock(CharacterConfig.class);
|
|
|
|
propertiesMap = new HashMap<>();
|
|
|
|
|
|
|
|
when(characterConfig.getMap()).thenReturn(propertiesMap);
|
|
|
|
|
|
|
|
json = new JSON(characterConfig);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// What follows is code mostly copied from the Message(De)SerializationTests. This is technically not DRY,
|
|
|
|
// but I claim that under AHA this is fine.
|
|
|
|
|
|
|
|
|
|
|
|
// =============================================================================
|
|
|
|
// >>>>>>> Deserialization tests <<<<<<<
|
|
|
|
// =============================================================================
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void characterSelectionDeserializationParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
2021-05-30 16:07:05 +00:00
|
|
|
{
|
2021-06-03 21:08:11 +00:00
|
|
|
"messageType":"CHARACTER_SELECTION",
|
|
|
|
"characters":[false,true,false,true,false,true,false,true,false,true,false,true]
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new CharacterSelectionMessage();
|
|
|
|
// message.messageType = MessageType.CHARACTER_SELECTION;
|
|
|
|
message.characters = new Boolean[] {false,true,false,true,false,true,false,true,false,true,false,true};
|
|
|
|
|
|
|
|
assertThat((CharacterSelectionMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void confirmSelectionParseParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"CONFIRM_SELECTION",
|
|
|
|
"selectionComplete":true
|
|
|
|
}
|
2021-05-30 16:07:05 +00:00
|
|
|
""";
|
2021-05-31 21:24:22 +00:00
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
var message = new ConfirmSelectionMessage();
|
|
|
|
// message.messageType = MessageType.CONFIRM_SELECTION;
|
|
|
|
message.selectionComplete = true;
|
|
|
|
|
|
|
|
assertThat((ConfirmSelectionMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
2021-05-11 04:14:18 +00:00
|
|
|
}
|
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
@Test
|
|
|
|
void errorParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"ERROR",
|
|
|
|
"message": "error error",
|
|
|
|
"type":0
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
var message = new ErrorMessage();
|
|
|
|
// message.messageType = MessageType.ERROR;
|
|
|
|
message.message = "error error";
|
|
|
|
message.type = 0;
|
|
|
|
|
|
|
|
assertThat((ErrorMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
2021-05-11 04:14:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-06-03 21:08:11 +00:00
|
|
|
void gameAssignmentParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GAME_ASSIGNMENT",
|
|
|
|
"gameID":"6a39c3cf-26d8-409e-a309-45590f38ec4f",
|
|
|
|
"characterSelection":[
|
|
|
|
{
|
|
|
|
"characterID": 1,
|
|
|
|
"name": "Rocket Raccoon",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 2,
|
|
|
|
"AP": 2,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 30,
|
|
|
|
"rangeCombatReach": 5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID": 2,
|
|
|
|
"name": "Quicksilver",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 6,
|
|
|
|
"AP": 1,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 10,
|
|
|
|
"rangeCombatReach": 3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID": 3,
|
|
|
|
"name": "Hulk",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 2,
|
|
|
|
"AP": 2,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 30,
|
|
|
|
"rangeCombatReach": 5
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var racoon = new CharacterProperties();
|
|
|
|
|
|
|
|
racoon.characterID = 1;
|
|
|
|
racoon.name = "Rocket Raccoon";
|
|
|
|
racoon.HP = 100;
|
|
|
|
racoon.MP = 2;
|
|
|
|
racoon.AP = 2;
|
|
|
|
racoon.meleeDamage = 10;
|
|
|
|
racoon.rangedDamage = 30;
|
|
|
|
racoon.attackRange = 5;
|
|
|
|
|
|
|
|
|
|
|
|
var quicksilver = new CharacterProperties();
|
|
|
|
|
|
|
|
quicksilver.characterID = 2;
|
|
|
|
quicksilver.name = "Quicksilver";
|
|
|
|
quicksilver.HP = 100;
|
|
|
|
quicksilver.MP = 6;
|
|
|
|
quicksilver.AP = 1;
|
|
|
|
quicksilver.meleeDamage = 10;
|
|
|
|
quicksilver.rangedDamage = 10;
|
|
|
|
quicksilver.attackRange = 3;
|
|
|
|
|
|
|
|
|
|
|
|
var hulk = new CharacterProperties();
|
|
|
|
|
|
|
|
hulk.characterID = 3;
|
|
|
|
hulk.name = "Hulk";
|
|
|
|
hulk.HP = 100;
|
|
|
|
hulk.MP = 2;
|
|
|
|
hulk.AP = 2;
|
|
|
|
hulk.meleeDamage = 10;
|
|
|
|
hulk.rangedDamage = 30;
|
|
|
|
hulk.attackRange = 5;
|
|
|
|
|
|
|
|
var message = new GameAssignmentMessage();
|
|
|
|
// message.messageType = MessageType.GAME_ASSIGNMENT;
|
|
|
|
message.gameID = "6a39c3cf-26d8-409e-a309-45590f38ec4f";
|
|
|
|
message.characterSelection = new CharacterProperties[] {racoon, quicksilver, hulk};
|
|
|
|
|
|
|
|
assertThat((GameAssignmentMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void gameStructureParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GAME_STRUCTURE",
|
|
|
|
"assignment": "PlayerOne",
|
|
|
|
"playerOneName": "Gandalf",
|
|
|
|
"playerTwoName": "Bilbo",
|
|
|
|
"playerOneCharacters":[
|
|
|
|
{
|
|
|
|
"characterID": 1,
|
|
|
|
"name": "Rocket Raccoon",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 2,
|
|
|
|
"AP": 2,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 30,
|
|
|
|
"rangeCombatReach": 5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID": 2,
|
|
|
|
"name": "Quicksilver",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 6,
|
|
|
|
"AP": 1,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 10,
|
|
|
|
"rangeCombatReach": 3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID": 3,
|
|
|
|
"name": "Hulk",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 2,
|
|
|
|
"AP": 2,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 30,
|
|
|
|
"rangeCombatReach": 5
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"playerTwoCharacters":[
|
|
|
|
{
|
|
|
|
"characterID": 19,
|
|
|
|
"name": "Loki",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 6,
|
|
|
|
"AP": 1,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 10,
|
|
|
|
"rangeCombatReach": 3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID": 20,
|
|
|
|
"name": "Silver Surfer",
|
|
|
|
"HP": 100,
|
|
|
|
"MP": 6,
|
|
|
|
"AP": 1,
|
|
|
|
"meleeDamage": 10,
|
|
|
|
"rangeCombatDamage": 10,
|
|
|
|
"rangeCombatReach": 3
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"scenarioconfig": {
|
|
|
|
"scenario":[
|
|
|
|
["GRASS","GRASS", "GRASS", "GRASS", "GRASS", "GRASS", "GRASS"],
|
|
|
|
["GRASS","GRASS", "GRASS", "ROCK", "GRASS", "GRASS", "GRASS"],
|
|
|
|
["GRASS","GRASS", "GRASS", "ROCK", "GRASS", "GRASS", "GRASS"],
|
|
|
|
["GRASS","GRASS", "GRASS", "ROCK", "GRASS", "GRASS", "GRASS"],
|
|
|
|
["GRASS","GRASS", "ROCK", "ROCK", "ROCK", "GRASS", "GRASS"],
|
|
|
|
["GRASS","ROCK", "ROCK", "ROCK", "ROCK", "ROCK", "GRASS"]
|
|
|
|
],
|
|
|
|
"author": "jakobmh",
|
|
|
|
"name": "asgard"
|
|
|
|
},
|
|
|
|
"matchconfig": {
|
|
|
|
"maxRounds": 30,
|
|
|
|
"maxRoundTime": 300,
|
|
|
|
"maxGameTime": 1800,
|
|
|
|
"maxAnimationTime": 50
|
|
|
|
}
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var racoon = new CharacterProperties();
|
|
|
|
|
|
|
|
racoon.characterID = 1;
|
|
|
|
racoon.name = "Rocket Raccoon";
|
|
|
|
racoon.HP = 100;
|
|
|
|
racoon.MP = 2;
|
|
|
|
racoon.AP = 2;
|
|
|
|
racoon.meleeDamage = 10;
|
|
|
|
racoon.rangedDamage = 30;
|
|
|
|
racoon.attackRange = 5;
|
|
|
|
|
|
|
|
|
|
|
|
var quicksilver = new CharacterProperties();
|
|
|
|
|
|
|
|
quicksilver.characterID = 2;
|
|
|
|
quicksilver.name = "Quicksilver";
|
|
|
|
quicksilver.HP = 100;
|
|
|
|
quicksilver.MP = 6;
|
|
|
|
quicksilver.AP = 1;
|
|
|
|
quicksilver.meleeDamage = 10;
|
|
|
|
quicksilver.rangedDamage = 10;
|
|
|
|
quicksilver.attackRange = 3;
|
|
|
|
|
|
|
|
|
|
|
|
var hulk = new CharacterProperties();
|
|
|
|
|
|
|
|
hulk.characterID = 3;
|
|
|
|
hulk.name = "Hulk";
|
|
|
|
hulk.HP = 100;
|
|
|
|
hulk.MP = 2;
|
|
|
|
hulk.AP = 2;
|
|
|
|
hulk.meleeDamage = 10;
|
|
|
|
hulk.rangedDamage = 30;
|
|
|
|
hulk.attackRange = 5;
|
|
|
|
|
|
|
|
var loki = new CharacterProperties();
|
|
|
|
|
|
|
|
loki.characterID = 19;
|
|
|
|
loki.name = "Loki";
|
|
|
|
loki.HP = 100;
|
|
|
|
loki.MP = 6;
|
|
|
|
loki.AP = 1;
|
|
|
|
loki.meleeDamage = 10;
|
|
|
|
loki.rangedDamage = 10;
|
|
|
|
loki.attackRange = 3;
|
|
|
|
|
|
|
|
var silversurfer = new CharacterProperties();
|
|
|
|
|
|
|
|
silversurfer.characterID = 20;
|
|
|
|
silversurfer.name = "Silver Surfer";
|
|
|
|
silversurfer.HP = 100;
|
|
|
|
silversurfer.MP = 6;
|
|
|
|
silversurfer.AP = 1;
|
|
|
|
silversurfer.meleeDamage = 10;
|
|
|
|
silversurfer.rangedDamage = 10;
|
|
|
|
silversurfer.attackRange = 3;
|
|
|
|
|
|
|
|
var scenarioConfig = new ScenarioConfig();
|
|
|
|
|
|
|
|
scenarioConfig.scenario = new FieldType[][] {
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS}
|
2021-05-11 04:14:18 +00:00
|
|
|
};
|
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
scenarioConfig.author = "jakobmh";
|
|
|
|
scenarioConfig.name = "asgard";
|
|
|
|
|
|
|
|
var matchconfig = new PartyConfig();
|
|
|
|
|
|
|
|
matchconfig.maxRounds = 30;
|
|
|
|
matchconfig.maxRoundTime = 300;
|
|
|
|
matchconfig.maxGameTime = 1800;
|
|
|
|
matchconfig.maxAnimationTime = 50;
|
|
|
|
|
|
|
|
var message = new GameStructureMessage();
|
|
|
|
|
|
|
|
// message.messageType = MessageType.GAME_STRUCTURE;
|
|
|
|
message.assignment = AssignmentEnum.PlayerOne;
|
|
|
|
message.playerOneName = "Gandalf";
|
|
|
|
message.playerTwoName = "Bilbo";
|
|
|
|
message.playerOneCharacters = new CharacterProperties[] {racoon, quicksilver, hulk};
|
|
|
|
message.playerTwoCharacters = new CharacterProperties[] {loki, silversurfer};
|
|
|
|
message.scenarioconfig = scenarioConfig;
|
|
|
|
message.matchconfig = matchconfig;
|
|
|
|
|
|
|
|
assertThat((GameStructureMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void generalAssignmentParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GENERAL_ASSIGNMENT",
|
|
|
|
"gameID":"6a39c3cf-26d8-409e-a309-45590f38ec4f"
|
|
|
|
}
|
2021-05-30 16:07:05 +00:00
|
|
|
""";
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
var message = new GeneralAssignmentMessage();
|
|
|
|
// message.messageType = MessageType.GENERAL_ASSIGNMENT;
|
|
|
|
message.gameID = "6a39c3cf-26d8-409e-a309-45590f38ec4f";
|
|
|
|
|
|
|
|
assertThat((GeneralAssignmentMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
@Test
|
|
|
|
void goodbyeClientParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GOODBYE_CLIENT",
|
|
|
|
"message":"und schüss"
|
|
|
|
}
|
|
|
|
""";
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
var message = new GoodbyeClientMessage();
|
|
|
|
message.message = "und schüss";
|
|
|
|
|
|
|
|
assertThat((GoodbyeClientMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void helloClientParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"HELLO_CLIENT",
|
|
|
|
"runningGame":false
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var message = new HelloClientMessage();
|
|
|
|
message.runningGame = false;
|
|
|
|
|
|
|
|
|
|
|
|
assertThat((HelloClientMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void helloServerParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType": "HELLO_SERVER",
|
|
|
|
"name":"mynamehere",
|
|
|
|
"deviceID":"8f966f5a-9b62-456c-b4a3-50c90c75789c"
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var message = new HelloServerMessage();
|
|
|
|
message.name = "mynamehere";
|
|
|
|
message.deviceID = "8f966f5a-9b62-456c-b4a3-50c90c75789c";
|
|
|
|
|
|
|
|
assertThat((HelloServerMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void playerReadyParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"PLAYER_READY",
|
|
|
|
"startGame":false,
|
|
|
|
"role":"PLAYER"
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var message = new PlayerReadyMessage();
|
|
|
|
message.startGame = false;
|
|
|
|
message.role = RoleEnum.PLAYER;
|
|
|
|
|
|
|
|
assertThat((PlayerReadyMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void reconnectParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"RECONNECT",
|
|
|
|
"reconnect":false
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var message = new ReconnectMessage();
|
|
|
|
message.reconnect = false;
|
|
|
|
|
|
|
|
assertThat((ReconnectMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void eventParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"EVENTS",
|
|
|
|
"messages":[
|
|
|
|
{
|
|
|
|
"eventType": "MeleeAttackEvent",
|
|
|
|
"originEntity": {"entityID": "P1", "ID": 3},
|
|
|
|
"targetEntity": {"entityID": "P2", "ID": 4},
|
|
|
|
"originField": [3, 7],
|
|
|
|
"targetField": [3, 6]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"eventType": "MoveEvent",
|
|
|
|
"originEntity": {"entityID": "P1", "ID": 3},
|
|
|
|
"originField": [3, 7],
|
|
|
|
"targetField": [3, 6]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"customContentType":"SomeAwesomeCustomContent",
|
|
|
|
"customContent":{
|
|
|
|
"customKey":"someFancyValue",
|
|
|
|
"customInteger":5,
|
|
|
|
"customTruth":false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var meleeAttackEvent = new EventBuilder(EventType.MeleeAttackEvent)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withTargetEntity(new EntityID(EntityType.P2, 4))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.buildCharacterEvent();
|
|
|
|
|
|
|
|
var moveEvent = new EventBuilder(EventType.MoveEvent)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.buildCharacterEvent();
|
|
|
|
|
|
|
|
var message = new EventMessage();
|
|
|
|
message.messages = new Event[] {meleeAttackEvent, moveEvent};
|
|
|
|
|
|
|
|
message.customContentType = "SomeAwesomeCustomContent";
|
|
|
|
message.customContent = new HashMap<>();
|
|
|
|
|
|
|
|
message.customContent.put("customKey", "someFancyValue");
|
|
|
|
message.customContent.put("customInteger", 5);
|
|
|
|
message.customContent.put("customTruth", false);
|
|
|
|
|
|
|
|
assertThat((EventMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
2021-05-11 04:14:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-06-03 21:08:11 +00:00
|
|
|
void eventWithCharactersThatNeedConfigParseTest() throws JsonProcessingException {
|
|
|
|
var alphaConfig = new CharacterProperties();
|
|
|
|
alphaConfig.attackRange = 45;
|
|
|
|
alphaConfig.rangedDamage = 65;
|
|
|
|
alphaConfig.meleeDamage = 12;
|
|
|
|
propertiesMap.put("Alpha", alphaConfig);
|
|
|
|
|
|
|
|
var characterAlpha = new Character(
|
|
|
|
new EntityID(EntityType.P1, 4),
|
|
|
|
new IntVector2(5, 3),
|
|
|
|
"Alpha",
|
|
|
|
210,
|
|
|
|
9,
|
|
|
|
3,
|
|
|
|
45, // still -1 because no gameConfig object available
|
|
|
|
65,
|
|
|
|
12);
|
|
|
|
|
|
|
|
characterAlpha.inventory.addStone(StoneType.valueOf(1));
|
|
|
|
characterAlpha.inventory.addStone(StoneType.valueOf(4));
|
|
|
|
|
|
|
|
characterAlpha.setPosition(new IntVector2(4, 2));
|
|
|
|
|
|
|
|
var steelWallConfig = new CharacterProperties();
|
|
|
|
steelWallConfig.attackRange = 23;
|
|
|
|
steelWallConfig.rangedDamage = 34;
|
|
|
|
steelWallConfig.meleeDamage = 45;
|
|
|
|
propertiesMap.put("Steel Wall", steelWallConfig);
|
|
|
|
|
|
|
|
var characterSteelWall = new Character(
|
|
|
|
new EntityID(EntityType.P1, 4),
|
|
|
|
new IntVector2(255, 0),
|
|
|
|
"Steel Wall",
|
|
|
|
123,
|
|
|
|
2,
|
|
|
|
21,
|
|
|
|
23,
|
|
|
|
34,
|
|
|
|
45);
|
|
|
|
|
|
|
|
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 jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"EVENTS",
|
|
|
|
"messages":[
|
|
|
|
{
|
|
|
|
"eventType":"Ack"
|
|
|
|
},
|
2021-05-30 16:07:05 +00:00
|
|
|
{
|
|
|
|
"eventType": "GamestateEvent",
|
2021-06-03 21:08:11 +00:00
|
|
|
"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]
|
|
|
|
}
|
|
|
|
],
|
2021-05-30 16:07:05 +00:00
|
|
|
"turnOrder": [
|
2021-06-03 21:08:11 +00:00
|
|
|
{"entityID": "P1", "ID": 5},
|
|
|
|
{"entityID": "P1", "ID": 4},
|
2021-05-30 16:07:05 +00:00
|
|
|
{"entityID": "P1", "ID": 3},
|
2021-06-03 21:08:11 +00:00
|
|
|
{"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},
|
|
|
|
{"entityID": "P2", "ID": 5}
|
|
|
|
],
|
|
|
|
"mapSize": [15, 300],
|
|
|
|
"activeCharacter": {"entityID": "P2", "ID": 3},
|
|
|
|
"stoneCooldowns": [1, 1, 3, 1, 4, 2],
|
|
|
|
"winCondition": true
|
2021-05-30 16:07:05 +00:00
|
|
|
}
|
2021-06-03 21:08:11 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
""";
|
|
|
|
|
|
|
|
var message = new EventMessage();
|
2021-05-11 04:14:18 +00:00
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
message.messages = new Event[] {new EventBuilder(EventType.Ack).buildGameStateEvent(), gamestate};
|
|
|
|
|
|
|
|
assertThat(json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
2021-05-11 04:14:18 +00:00
|
|
|
}
|
|
|
|
|
2021-06-03 21:08:11 +00:00
|
|
|
|
2021-05-11 04:14:18 +00:00
|
|
|
@Test
|
2021-06-03 21:08:11 +00:00
|
|
|
void requestParseTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
2021-05-30 16:07:05 +00:00
|
|
|
{
|
2021-06-03 21:08:11 +00:00
|
|
|
"messageType":"REQUESTS",
|
|
|
|
"messages":[
|
|
|
|
{
|
|
|
|
"requestType": "MeleeAttackRequest",
|
|
|
|
"originEntity": {"entityID": "P1", "ID": 3},
|
|
|
|
"targetEntity": {"entityID": "P2", "ID": 4},
|
|
|
|
"originField": [3, 7],
|
|
|
|
"targetField": [3, 6],
|
|
|
|
"value":14
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"requestType": "MoveRequest",
|
|
|
|
"originEntity": {"entityID": "P1", "ID": 3},
|
|
|
|
"originField": [3, 7],
|
|
|
|
"targetField": [3, 6]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"customContentType":"SomeAwesomeCustomContent",
|
|
|
|
"customContent":{
|
|
|
|
"customKey":"someFancyValue",
|
|
|
|
"customInteger":5,
|
|
|
|
"customTruth":false
|
|
|
|
}
|
2021-05-30 16:07:05 +00:00
|
|
|
}
|
|
|
|
""";
|
2021-06-03 21:08:11 +00:00
|
|
|
|
|
|
|
var meleeAttackRequest = new RequestBuilder(RequestType.MeleeAttackRequest)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withTargetEntity(new EntityID(EntityType.P2, 4))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.withValue(14)
|
|
|
|
.buildCharacterRequest();
|
|
|
|
|
|
|
|
var moveRequest = new RequestBuilder(RequestType.MoveRequest)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.buildCharacterRequest();
|
|
|
|
|
|
|
|
var message = new RequestMessage();
|
|
|
|
message.messages = new Request[] {meleeAttackRequest, moveRequest};
|
|
|
|
|
|
|
|
message.customContentType = "SomeAwesomeCustomContent";
|
|
|
|
message.customContent = new HashMap<>();
|
|
|
|
|
|
|
|
message.customContent.put("customKey", "someFancyValue");
|
|
|
|
message.customContent.put("customInteger", 5);
|
|
|
|
message.customContent.put("customTruth", false);
|
|
|
|
|
|
|
|
assertThat((RequestMessage) json.parse(jsonRepresentingMessage).get())
|
|
|
|
.isEqualTo(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// =============================================================================
|
|
|
|
// >>>>>>> Serialization tests <<<<<<<
|
|
|
|
// =============================================================================
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void characterSelectionStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"CHARACTER_SELECTION",
|
|
|
|
"characters":[false,true,false,true,false,true,false,true,false,true,false,true]
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new CharacterSelectionMessage();
|
|
|
|
// message.messageType = MessageType.CHARACTER_SELECTION;
|
|
|
|
message.characters = new Boolean[] {false,true,false,true,false,true,false,true,false,true,false,true};
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void confirmSelectionStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"CONFIRM_SELECTION",
|
|
|
|
"selectionComplete":true
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new ConfirmSelectionMessage();
|
|
|
|
// message.messageType = MessageType.CONFIRM_SELECTION;
|
|
|
|
message.selectionComplete = true;
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void errorStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"ERROR",
|
|
|
|
"message":"error error",
|
|
|
|
"type":0
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
var message = new ErrorMessage();
|
|
|
|
// message.messageType = MessageType.ERROR;
|
|
|
|
message.message = "error error";
|
|
|
|
message.type = 0;
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void gameAssignmentStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GAME_ASSIGNMENT",
|
|
|
|
"gameID":"6a39c3cf-26d8-409e-a309-45590f38ec4f",
|
|
|
|
"characterSelection":[
|
|
|
|
{
|
|
|
|
"characterID":1,
|
|
|
|
"name":"Rocket Raccoon",
|
|
|
|
"HP":100,
|
|
|
|
"MP":2,
|
|
|
|
"AP":2,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":30,
|
|
|
|
"rangeCombatReach":5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID":2,
|
|
|
|
"name":"Quicksilver",
|
|
|
|
"HP":100,
|
|
|
|
"MP":6,
|
|
|
|
"AP":1,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":10,
|
|
|
|
"rangeCombatReach":3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID":3,
|
|
|
|
"name":"Hulk",
|
|
|
|
"HP":100,
|
|
|
|
"MP":2,
|
|
|
|
"AP":2,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":30,
|
|
|
|
"rangeCombatReach":5
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var racoon = new CharacterProperties();
|
|
|
|
|
|
|
|
racoon.characterID = 1;
|
|
|
|
racoon.name = "Rocket Raccoon";
|
|
|
|
racoon.HP = 100;
|
|
|
|
racoon.MP = 2;
|
|
|
|
racoon.AP = 2;
|
|
|
|
racoon.meleeDamage = 10;
|
|
|
|
racoon.rangedDamage = 30;
|
|
|
|
racoon.attackRange = 5;
|
|
|
|
|
|
|
|
|
|
|
|
var quicksilver = new CharacterProperties();
|
|
|
|
|
|
|
|
quicksilver.characterID = 2;
|
|
|
|
quicksilver.name = "Quicksilver";
|
|
|
|
quicksilver.HP = 100;
|
|
|
|
quicksilver.MP = 6;
|
|
|
|
quicksilver.AP = 1;
|
|
|
|
quicksilver.meleeDamage = 10;
|
|
|
|
quicksilver.rangedDamage = 10;
|
|
|
|
quicksilver.attackRange = 3;
|
|
|
|
|
|
|
|
|
|
|
|
var hulk = new CharacterProperties();
|
|
|
|
|
|
|
|
hulk.characterID = 3;
|
|
|
|
hulk.name = "Hulk";
|
|
|
|
hulk.HP = 100;
|
|
|
|
hulk.MP = 2;
|
|
|
|
hulk.AP = 2;
|
|
|
|
hulk.meleeDamage = 10;
|
|
|
|
hulk.rangedDamage = 30;
|
|
|
|
hulk.attackRange = 5;
|
|
|
|
|
|
|
|
var message = new GameAssignmentMessage();
|
|
|
|
// message.messageType = MessageType.GAME_ASSIGNMENT;
|
|
|
|
message.gameID = "6a39c3cf-26d8-409e-a309-45590f38ec4f";
|
|
|
|
message.characterSelection = new CharacterProperties[] {racoon, quicksilver, hulk};
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void testGameStructure() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GAME_STRUCTURE",
|
|
|
|
"assignment":"PlayerOne",
|
|
|
|
"playerOneName":"Gandalf",
|
|
|
|
"playerTwoName":"Bilbo",
|
|
|
|
"playerOneCharacters":[
|
|
|
|
{
|
|
|
|
"characterID":1,
|
|
|
|
"name":"Rocket Raccoon",
|
|
|
|
"HP":100,
|
|
|
|
"MP":2,
|
|
|
|
"AP":2,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":30,
|
|
|
|
"rangeCombatReach":5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID":2,
|
|
|
|
"name":"Quicksilver",
|
|
|
|
"HP":100,
|
|
|
|
"MP":6,
|
|
|
|
"AP":1,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":10,
|
|
|
|
"rangeCombatReach":3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID":3,
|
|
|
|
"name":"Hulk",
|
|
|
|
"HP":100,
|
|
|
|
"MP":2,
|
|
|
|
"AP":2,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":30,
|
|
|
|
"rangeCombatReach":5
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"playerTwoCharacters":[
|
|
|
|
{
|
|
|
|
"characterID":19,
|
|
|
|
"name":"Loki",
|
|
|
|
"HP":100,
|
|
|
|
"MP":6,
|
|
|
|
"AP":1,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":10,
|
|
|
|
"rangeCombatReach":3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"characterID":20,
|
|
|
|
"name":"Silver Surfer",
|
|
|
|
"HP":100,
|
|
|
|
"MP":6,
|
|
|
|
"AP":1,
|
|
|
|
"meleeDamage":10,
|
|
|
|
"rangeCombatDamage":10,
|
|
|
|
"rangeCombatReach":3
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"scenarioconfig":{
|
|
|
|
"scenario":[
|
|
|
|
["GRASS","GRASS","GRASS","GRASS","GRASS","GRASS","GRASS"],
|
|
|
|
["GRASS","GRASS","GRASS","ROCK","GRASS","GRASS","GRASS"],
|
|
|
|
["GRASS","GRASS","GRASS","ROCK","GRASS","GRASS","GRASS"],
|
|
|
|
["GRASS","GRASS","GRASS","ROCK","GRASS","GRASS","GRASS"],
|
|
|
|
["GRASS","GRASS","ROCK","ROCK","ROCK","GRASS","GRASS"],
|
|
|
|
["GRASS","ROCK","ROCK","ROCK","ROCK","ROCK","GRASS"]
|
|
|
|
],
|
|
|
|
"author":"jakobmh",
|
|
|
|
"name":"asgard"
|
|
|
|
},
|
|
|
|
"matchconfig":{
|
|
|
|
"maxRounds":30,
|
|
|
|
"maxRoundTime":300,
|
|
|
|
"maxGameTime":1800,
|
|
|
|
"maxAnimationTime":50,
|
|
|
|
"spaceStoneCD":0,
|
|
|
|
"mindStoneCD":0,
|
|
|
|
"realityStoneCD":0,
|
|
|
|
"powerStoneCD":0,
|
|
|
|
"timeStoneCD":0,
|
|
|
|
"soulStoneCD":0,
|
|
|
|
"mindStoneDMG":0,
|
|
|
|
"maxPauseTime":0,
|
|
|
|
"maxResponseTime":0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var racoon = new CharacterProperties();
|
|
|
|
|
|
|
|
racoon.characterID = 1;
|
|
|
|
racoon.name = "Rocket Raccoon";
|
|
|
|
racoon.HP = 100;
|
|
|
|
racoon.MP = 2;
|
|
|
|
racoon.AP = 2;
|
|
|
|
racoon.meleeDamage = 10;
|
|
|
|
racoon.rangedDamage = 30;
|
|
|
|
racoon.attackRange = 5;
|
|
|
|
|
|
|
|
|
|
|
|
var quicksilver = new CharacterProperties();
|
|
|
|
|
|
|
|
quicksilver.characterID = 2;
|
|
|
|
quicksilver.name = "Quicksilver";
|
|
|
|
quicksilver.HP = 100;
|
|
|
|
quicksilver.MP = 6;
|
|
|
|
quicksilver.AP = 1;
|
|
|
|
quicksilver.meleeDamage = 10;
|
|
|
|
quicksilver.rangedDamage = 10;
|
|
|
|
quicksilver.attackRange = 3;
|
|
|
|
|
|
|
|
|
|
|
|
var hulk = new CharacterProperties();
|
|
|
|
|
|
|
|
hulk.characterID = 3;
|
|
|
|
hulk.name = "Hulk";
|
|
|
|
hulk.HP = 100;
|
|
|
|
hulk.MP = 2;
|
|
|
|
hulk.AP = 2;
|
|
|
|
hulk.meleeDamage = 10;
|
|
|
|
hulk.rangedDamage = 30;
|
|
|
|
hulk.attackRange = 5;
|
|
|
|
|
|
|
|
var loki = new CharacterProperties();
|
|
|
|
|
|
|
|
loki.characterID = 19;
|
|
|
|
loki.name = "Loki";
|
|
|
|
loki.HP = 100;
|
|
|
|
loki.MP = 6;
|
|
|
|
loki.AP = 1;
|
|
|
|
loki.meleeDamage = 10;
|
|
|
|
loki.rangedDamage = 10;
|
|
|
|
loki.attackRange = 3;
|
|
|
|
|
|
|
|
var silversurfer = new CharacterProperties();
|
|
|
|
|
|
|
|
silversurfer.characterID = 20;
|
|
|
|
silversurfer.name = "Silver Surfer";
|
|
|
|
silversurfer.HP = 100;
|
|
|
|
silversurfer.MP = 6;
|
|
|
|
silversurfer.AP = 1;
|
|
|
|
silversurfer.meleeDamage = 10;
|
|
|
|
silversurfer.rangedDamage = 10;
|
|
|
|
silversurfer.attackRange = 3;
|
|
|
|
|
|
|
|
var scenarioConfig = new ScenarioConfig();
|
|
|
|
|
|
|
|
scenarioConfig.scenario = new FieldType[][] {
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS} ,
|
|
|
|
{FieldType.GRASS, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS}
|
|
|
|
};
|
|
|
|
|
|
|
|
scenarioConfig.author = "jakobmh";
|
|
|
|
scenarioConfig.name = "asgard";
|
|
|
|
|
|
|
|
var matchconfig = new PartyConfig();
|
|
|
|
|
|
|
|
matchconfig.maxRounds = 30;
|
|
|
|
matchconfig.maxRoundTime = 300;
|
|
|
|
matchconfig.maxGameTime = 1800;
|
|
|
|
matchconfig.maxAnimationTime = 50;
|
|
|
|
|
|
|
|
var message = new GameStructureMessage();
|
|
|
|
|
|
|
|
// message.messageType = MessageType.GAME_STRUCTURE;
|
|
|
|
message.assignment = AssignmentEnum.PlayerOne;
|
|
|
|
message.playerOneName = "Gandalf";
|
|
|
|
message.playerTwoName = "Bilbo";
|
|
|
|
message.playerOneCharacters = new CharacterProperties[] {racoon, quicksilver, hulk};
|
|
|
|
message.playerTwoCharacters = new CharacterProperties[] {loki, silversurfer};
|
|
|
|
message.scenarioconfig = scenarioConfig;
|
|
|
|
message.matchconfig = matchconfig;
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void generalAssignmentStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GENERAL_ASSIGNMENT",
|
|
|
|
"gameID":"6a39c3cf-26d8-409e-a309-45590f38ec4f"
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new GeneralAssignmentMessage();
|
|
|
|
// message.messageType = MessageType.GENERAL_ASSIGNMENT;
|
|
|
|
message.gameID = "6a39c3cf-26d8-409e-a309-45590f38ec4f";
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void goodbyeClientStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"GOODBYE_CLIENT",
|
|
|
|
"message":"und schüss"
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new GoodbyeClientMessage();
|
|
|
|
message.message = "und schüss";
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void helloClientStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"HELLO_CLIENT",
|
|
|
|
"runningGame":false
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new HelloClientMessage();
|
|
|
|
message.runningGame = false;
|
|
|
|
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void helloServerStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"HELLO_SERVER",
|
|
|
|
"name":"mynamehere",
|
|
|
|
"deviceID":"8f966f5a-9b62-456c-b4a3-50c90c75789c"
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new HelloServerMessage();
|
|
|
|
message.name = "mynamehere";
|
|
|
|
message.deviceID = "8f966f5a-9b62-456c-b4a3-50c90c75789c";
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void playerReadyStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"PLAYER_READY",
|
|
|
|
"startGame":false,
|
|
|
|
"role":"PLAYER"
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new PlayerReadyMessage();
|
|
|
|
message.startGame = false;
|
|
|
|
message.role = RoleEnum.PLAYER;
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void reconnectStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"RECONNECT",
|
|
|
|
"reconnect":false
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var message = new ReconnectMessage();
|
|
|
|
message.reconnect = false;
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
2021-05-11 04:14:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2021-06-03 21:08:11 +00:00
|
|
|
void eventStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"EVENTS",
|
|
|
|
"messages":[
|
|
|
|
{
|
|
|
|
"eventType":"MeleeAttackEvent",
|
|
|
|
"originEntity":{"entityID":"P1","ID":3},
|
|
|
|
"targetEntity":{"entityID":"P2","ID":4},
|
|
|
|
"originField":[3,7],
|
|
|
|
"targetField":[3,6]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"eventType":"MoveEvent",
|
|
|
|
"originEntity":{"entityID":"P1","ID":3},
|
|
|
|
"originField":[3,7],
|
|
|
|
"targetField":[3,6]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"customContentType":"SomeAwesomeCustomContent",
|
|
|
|
"customContent":{
|
|
|
|
"customKey":"someFancyValue",
|
|
|
|
"customInteger":5,
|
|
|
|
"customTruth":false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var meleeAttackEvent = new EventBuilder(EventType.MeleeAttackEvent)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withTargetEntity(new EntityID(EntityType.P2, 4))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.buildCharacterEvent();
|
|
|
|
|
|
|
|
var moveEvent = new EventBuilder(EventType.MoveEvent)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.buildCharacterEvent();
|
|
|
|
|
|
|
|
var message = new EventMessage();
|
|
|
|
message.messages = new Event[] {meleeAttackEvent, moveEvent};
|
|
|
|
|
|
|
|
message.customContentType = "SomeAwesomeCustomContent";
|
|
|
|
message.customContent = new HashMap<>();
|
|
|
|
|
|
|
|
message.customContent.put("customKey", "someFancyValue");
|
|
|
|
message.customContent.put("customInteger", 5);
|
|
|
|
message.customContent.put("customTruth", false);
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void requestStringifyTest() throws JsonProcessingException {
|
|
|
|
var jsonRepresentingMessage = """
|
|
|
|
{
|
|
|
|
"messageType":"REQUESTS",
|
|
|
|
"messages":[
|
|
|
|
{
|
|
|
|
"requestType":"MeleeAttackRequest",
|
|
|
|
"originEntity":{"entityID":"P1","ID":3},
|
|
|
|
"targetEntity":{"entityID":"P2","ID":4},
|
|
|
|
"originField":[3,7],
|
|
|
|
"targetField":[3,6],
|
|
|
|
"value":14
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"requestType":"MoveRequest",
|
|
|
|
"originEntity":{"entityID":"P1","ID":3},
|
|
|
|
"originField":[3,7],
|
|
|
|
"targetField":[3,6]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"customContentType":"SomeAwesomeCustomContent",
|
|
|
|
"customContent":{
|
|
|
|
"customKey":"someFancyValue",
|
|
|
|
"customInteger":5,
|
|
|
|
"customTruth":false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
""".replace("\n", "");
|
|
|
|
|
|
|
|
var meleeAttackRequest = new RequestBuilder(RequestType.MeleeAttackRequest)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withTargetEntity(new EntityID(EntityType.P2, 4))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.withValue(14)
|
|
|
|
.buildCharacterRequest();
|
|
|
|
|
|
|
|
var moveRequest = new RequestBuilder(RequestType.MoveRequest)
|
|
|
|
.withOriginEntity(new EntityID(EntityType.P1, 3))
|
|
|
|
.withOriginField(new IntVector2(3, 7))
|
|
|
|
.withTargetField(new IntVector2(3, 6))
|
|
|
|
.buildCharacterRequest();
|
|
|
|
|
|
|
|
var message = new RequestMessage();
|
|
|
|
message.messages = new Request[] {meleeAttackRequest, moveRequest};
|
|
|
|
|
|
|
|
message.customContentType = "SomeAwesomeCustomContent";
|
|
|
|
message.customContent = new HashMap<>();
|
|
|
|
|
|
|
|
message.customContent.put("customKey", "someFancyValue");
|
|
|
|
message.customContent.put("customInteger", 5);
|
|
|
|
message.customContent.put("customTruth", false);
|
|
|
|
|
|
|
|
assertThat(json.stringify(message).get())
|
|
|
|
.isEqualTo(jsonRepresentingMessage);
|
2021-05-11 04:14:18 +00:00
|
|
|
}
|
2021-06-02 14:28:19 +00:00
|
|
|
}
|