refactor: fixing codestyle and improving codequality

This commit is contained in:
Yannik Bretschneider 2021-06-03 19:33:14 +02:00
parent 29f5eed2fb
commit de6e9abfd7
24 changed files with 406 additions and 94 deletions

View File

@ -1,6 +1,7 @@
package uulm.teamname.marvelous.gamelibrary; package uulm.teamname.marvelous.gamelibrary;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
/** Provides various tools for Arrays. */ /** Provides various tools for Arrays. */
public class ArrayTools { public class ArrayTools {
@ -13,9 +14,7 @@ public class ArrayTools {
*/ */
public static <E> ArrayList<E> toArrayList(E[] a) { public static <E> ArrayList<E> toArrayList(E[] a) {
ArrayList<E> l = new ArrayList<>(a.length); ArrayList<E> l = new ArrayList<>(a.length);
for(E e: a) { l.addAll(Arrays.asList(a));
l.add(e);
}
return l; return l;
} }
} }

View File

@ -5,10 +5,8 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import java.util.Objects; import java.util.Objects;
/** Represents properties of a character in the {@link CharacterConfig} */
@JsonPropertyOrder({"characterID", "name", "HP", "MP", "AP", "meleeDamage", "rangeCombatDamage", "rangeCombatReach"}) @JsonPropertyOrder({"characterID", "name", "HP", "MP", "AP", "meleeDamage", "rangeCombatDamage", "rangeCombatReach"})
/**
* Represents properties of a character in the {@link CharacterConfig}.
*/
public class CharacterProperties { public class CharacterProperties {
public int characterID; public int characterID;
public String name; public String name;

View File

@ -27,7 +27,7 @@ public class ScenarioConfig {
@Override @Override
public int hashCode() { public int hashCode() {
int result = Objects.hash(author, name); int result = Objects.hash(author, name);
result = 31 * result + Arrays.hashCode(scenario); result = 31 * result + Arrays.deepHashCode(scenario);
return result; return result;
} }

View File

@ -2,9 +2,7 @@ package uulm.teamname.marvelous.gamelibrary.json;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonNodeUnwrapper { public class JsonNodeUnwrapper {

View File

@ -55,21 +55,17 @@ public class EntityDeserializer extends JsonDeserializer<Entity> {
((Character) result).inventory.addStone(StoneType.valueOf(i)); ((Character) result).inventory.addStone(StoneType.valueOf(i));
} }
} }
case InfinityStone -> { case InfinityStone -> result = new InfinityStone(
result = new InfinityStone(
new EntityID(EntityType.InfinityStones, node.get("ID").asInt()), new EntityID(EntityType.InfinityStones, node.get("ID").asInt()),
codec.treeToValue(node.get("position"), IntVector2.class), codec.treeToValue(node.get("position"), IntVector2.class),
StoneType.valueOf(node.get("ID").asInt()) StoneType.valueOf(node.get("ID").asInt())
); );
} case Rock -> result = new Rock(
case Rock -> {
result = new Rock(
new EntityID(EntityType.Rocks, node.get("ID").asInt()), new EntityID(EntityType.Rocks, node.get("ID").asInt()),
codec.treeToValue(node.get("position"), IntVector2.class), codec.treeToValue(node.get("position"), IntVector2.class),
node.get("HP").asInt() node.get("HP").asInt()
); );
} }
}
return result; return result;
} }
} }

View File

@ -1,7 +1,6 @@
package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize; package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonDeserializer;

View File

@ -28,7 +28,7 @@ public class EventDeserializer extends JsonDeserializer<Event> {
JsonNode currentNode = null; JsonNode currentNode = null;
EventBuilder builder; EventBuilder builder;
EventType eventType = null; EventType eventType;
if (!node.has("eventType")) { if (!node.has("eventType")) {
throw new IOException("Event had wrong format: no EventType found"); throw new IOException("Event had wrong format: no EventType found");

View File

@ -1,12 +1,8 @@
package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize; package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import uulm.teamname.marvelous.gamelibrary.IntVector2; import uulm.teamname.marvelous.gamelibrary.IntVector2;
import java.io.IOException; import java.io.IOException;
@ -15,7 +11,6 @@ public class IntVector2Deserializer extends JsonDeserializer<IntVector2> {
@Override @Override
public IntVector2 deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { public IntVector2 deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
var values = p.readValueAs(Integer[].class); var values = p.readValueAs(Integer[].class);
IntVector2 result = new IntVector2(values[0], values[1]); return new IntVector2(values[0], values[1]);
return result;
} }
} }

View File

@ -1,7 +1,6 @@
package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize; package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonDeserializer;
@ -39,7 +38,7 @@ public class RequestDeserializer extends JsonDeserializer<Request> {
.withTargetField(unwrap(node.get("targetField"), IntVector2.class, codec)) .withTargetField(unwrap(node.get("targetField"), IntVector2.class, codec))
.withStoneType(Optional.ofNullable(unwrap(node.get("stoneType"), EntityID.class, codec)) .withStoneType(Optional.ofNullable(unwrap(node.get("stoneType"), EntityID.class, codec))
.map(x -> StoneType.valueOf(x.id)) .map(x -> StoneType.valueOf(x.id))
.orElseGet(() -> null)); .orElse(null));
switch (requestType) { switch (requestType) {
case DisconnectRequest, case DisconnectRequest,

View File

@ -39,6 +39,7 @@ public class RequestSerializer extends StdSerializer<Request> {
} }
/** Method invoked after writing the RequestType, and used to write any additional values required */ /** Method invoked after writing the RequestType, and used to write any additional values required */
@SuppressWarnings({"EmptyMethod", "UnnecessaryReturnStatement"})
private void serializeGameRequest(GameRequest value, JsonGenerator gen, SerializerProvider provider) private void serializeGameRequest(GameRequest value, JsonGenerator gen, SerializerProvider provider)
throws IOException { throws IOException {
return; // does nothing, but still there for consistency return; // does nothing, but still there for consistency

View File

@ -3,8 +3,6 @@ package uulm.teamname.marvelous.gamelibrary.messages;
import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonTypeResolver;
import java.util.Objects; import java.util.Objects;
@ -13,7 +11,7 @@ import java.util.Objects;
* messageType, as fields that aren't sent are null. Note that most messages are not deserialized into the {@link * messageType, as fields that aren't sent are null. Note that most messages are not deserialized into the {@link
* BasicMessage}, but instead into messages such as the {@link EventMessage} or {@link GameAssignmentMessage}. * BasicMessage}, but instead into messages such as the {@link EventMessage} or {@link GameAssignmentMessage}.
*/ */
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "messageType") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "messageType")
@JsonSubTypes({ @JsonSubTypes({
@Type(value = HelloClientMessage.class, name = "HELLO_CLIENT"), @Type(value = HelloClientMessage.class, name = "HELLO_CLIENT"),
@Type(value = HelloServerMessage.class, name = "HELLO_SERVER"), @Type(value = HelloServerMessage.class, name = "HELLO_SERVER"),

View File

@ -1,7 +1,6 @@
package uulm.teamname.marvelous.gamelibrary.messages; package uulm.teamname.marvelous.gamelibrary.messages;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import uulm.teamname.marvelous.gamelibrary.events.Event; import uulm.teamname.marvelous.gamelibrary.events.Event;
import java.util.Arrays; import java.util.Arrays;

View File

@ -1,7 +1,5 @@
package uulm.teamname.marvelous.gamelibrary.messages; package uulm.teamname.marvelous.gamelibrary.messages;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import uulm.teamname.marvelous.gamelibrary.config.CharacterConfig;
import uulm.teamname.marvelous.gamelibrary.config.CharacterProperties; import uulm.teamname.marvelous.gamelibrary.config.CharacterProperties;
import java.util.Arrays; import java.util.Arrays;

View File

@ -6,7 +6,6 @@ import uulm.teamname.marvelous.gamelibrary.config.CharacterProperties;
import uulm.teamname.marvelous.gamelibrary.config.PartyConfig; import uulm.teamname.marvelous.gamelibrary.config.PartyConfig;
import uulm.teamname.marvelous.gamelibrary.config.ScenarioConfig; import uulm.teamname.marvelous.gamelibrary.config.ScenarioConfig;
import java.lang.reflect.Array;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -10,7 +10,6 @@ import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.*; import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character; import uulm.teamname.marvelous.gamelibrary.entities.Character;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
class EventBuilderTest { class EventBuilderTest {
@ -127,8 +126,8 @@ class EventBuilderTest {
.buildGameEvent(); .buildGameEvent();
assertThat(roundSetupEvent.check()) assertThat(roundSetupEvent.check())
.isTrue() .withFailMessage("RoundSetupEvent failed check")
.withFailMessage("RoundSetupEvent failed check"); .isTrue();
var roundSetupEventBaseline = new GameEvent(); var roundSetupEventBaseline = new GameEvent();
roundSetupEventBaseline.type = EventType.RoundSetupEvent; roundSetupEventBaseline.type = EventType.RoundSetupEvent;
@ -145,8 +144,8 @@ class EventBuilderTest {
.buildGameEvent(); .buildGameEvent();
assertThat(turnEvent.check()) assertThat(turnEvent.check())
.isTrue() .withFailMessage("TurnEvent failed check")
.withFailMessage("TurnEvent failed check"); .isTrue();
var turnEventBaseline = new GameEvent(); var turnEventBaseline = new GameEvent();
turnEventBaseline.type = EventType.TurnEvent; turnEventBaseline.type = EventType.TurnEvent;
@ -172,8 +171,8 @@ class EventBuilderTest {
.buildGameEvent(); .buildGameEvent();
assertThat(gameEvent.check()) assertThat(gameEvent.check())
.isTrue() .withFailMessage("GameEvent failed check")
.withFailMessage("GameEvent failed check"); .isTrue();
var baseline = new GameEvent(); var baseline = new GameEvent();
baseline.type = EventType.DisconnectEvent; baseline.type = EventType.DisconnectEvent;
@ -201,8 +200,8 @@ class EventBuilderTest {
.buildGameStateEvent(); .buildGameStateEvent();
assertThat(gameStateEvent.check()) assertThat(gameStateEvent.check())
.isTrue() .withFailMessage("GameStateEvent failed check")
.withFailMessage("GameStateEvent failed check"); .isTrue();
var baseline = new GamestateEvent(); var baseline = new GamestateEvent();
baseline.type = EventType.ConsumedAPEvent; baseline.type = EventType.ConsumedAPEvent;
@ -226,7 +225,7 @@ class EventBuilderTest {
//the target entity is not set --> check() return false //the target entity is not set --> check() return false
boolean b = des2.check(); boolean b = des2.check();
assertEquals(b, false); assertFalse(b);
} }
@ -240,7 +239,7 @@ class EventBuilderTest {
//the target entity, the origin and the target entity are not set --> check() return false //the target entity, the origin and the target entity are not set --> check() return false
boolean b = des2.check(); boolean b = des2.check();
assertEquals(b, false); assertFalse(b);
} }
@ -269,12 +268,12 @@ class EventBuilderTest {
assertEquals(des.targetField, des2.targetField); assertEquals(des.targetField, des2.targetField);
// EntityEvent des2 = new EntityEvent(eb.); // EntityEvent des2 = new EntityEvent(eb.);
assertEquals(des.equals(des2), true); assertTrue(des.equals(des2));
assertEquals(des.hashCode(), des2.hashCode()); assertEquals(des.hashCode(), des2.hashCode());
des.targetField = new IntVector2(3,3); des.targetField = new IntVector2(3,3);
assertEquals(des.equals(des2), false); assertFalse(des.equals(des2));
assertNotEquals(des.hashCode(), des2.hashCode()); assertNotEquals(des.hashCode(), des2.hashCode());
@ -312,12 +311,12 @@ class EventBuilderTest {
assertEquals(des.originEntity, des2.originEntity); assertEquals(des.originEntity, des2.originEntity);
assertEquals(des.originField, des2.originField); assertEquals(des.originField, des2.originField);
assertEquals(des.equals(des2), true); assertTrue(des.equals(des2));
assertEquals(des.hashCode(), des2.hashCode()); assertEquals(des.hashCode(), des2.hashCode());
des.targetField = new IntVector2(3,3); des.targetField = new IntVector2(3,3);
assertEquals(des.equals(des2), false); assertFalse(des.equals(des2));
assertNotEquals(des.hashCode(), des2.hashCode()); assertNotEquals(des.hashCode(), des2.hashCode());
@ -365,31 +364,31 @@ class EventBuilderTest {
void buildCustomEvent() { void buildCustomEvent() {
//testing CustomEvent class //testing CustomEvent class
assertThat(new EventBuilder(EventType.CustomEvent) assertThat(new EventBuilder(EventType.CustomEvent)
.withCustomContent(new HashMap<String, Object>()) .withCustomContent(new HashMap<>())
.buildCustomEvent().check()).isTrue(); .buildCustomEvent().check()).isTrue();
CustomEvent des = new CustomEvent(); CustomEvent des = new CustomEvent();
des.type = EventType.CustomEvent; des.type = EventType.CustomEvent;
des.customContent= new HashMap<String, Object>(); des.customContent= new HashMap<>();
EventBuilder eb = new EventBuilder(EventType.CustomEvent); EventBuilder eb = new EventBuilder(EventType.CustomEvent);
CustomEvent des2 = eb CustomEvent des2 = eb
.withCustomContent(new HashMap<String, Object>()) .withCustomContent(new HashMap<>())
.buildCustomEvent(); .buildCustomEvent();
//testing EventBuilder and CustomEvent class //testing EventBuilder and CustomEvent class
assertEquals(des.type, des2.type); assertEquals(des.type, des2.type);
assertEquals(des.customContent, des2.customContent); assertEquals(des.customContent, des2.customContent);
assertEquals(des.equals(des2), true); assertTrue(des.equals(des2));
assertEquals(des.hashCode(), des2.hashCode()); assertEquals(des.hashCode(), des2.hashCode());
Object o = new Object(); Object o = new Object();
des.customContent = new HashMap<String, Object>(1,1); des.customContent = new HashMap<>(1, 1);
des.customContent.put("a",o); des.customContent.put("a",o);
assertEquals(des.equals(des2), false); assertFalse(des.equals(des2));
assertNotEquals(des.hashCode(), des2.hashCode()); assertNotEquals(des.hashCode(), des2.hashCode());

View File

@ -7,7 +7,6 @@ import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.config.*; import uulm.teamname.marvelous.gamelibrary.config.*;
import uulm.teamname.marvelous.gamelibrary.entities.*; import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character; import uulm.teamname.marvelous.gamelibrary.entities.Character;
import uulm.teamname.marvelous.gamelibrary.events.Event;
import uulm.teamname.marvelous.gamelibrary.requests.*; import uulm.teamname.marvelous.gamelibrary.requests.*;
import java.util.*; import java.util.*;

View File

@ -14,7 +14,6 @@ import uulm.teamname.marvelous.gamelibrary.events.Event;
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder; import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
import uulm.teamname.marvelous.gamelibrary.events.EventType; import uulm.teamname.marvelous.gamelibrary.events.EventType;
import uulm.teamname.marvelous.gamelibrary.messages.EventMessage; import uulm.teamname.marvelous.gamelibrary.messages.EventMessage;
import uulm.teamname.marvelous.gamelibrary.messages.MessageType;
import java.util.*; import java.util.*;
@ -62,7 +61,7 @@ class JSONTest {
}; };
target = new EventMessage(); target = new EventMessage();
target.customContentType = "TestCustomContent"; target.customContentType = "TestCustomContent";
target.customContent = new HashMap<String, Object>(); target.customContent = new HashMap<>();
target.customContent.put("customKey", "customResult"); target.customContent.put("customKey", "customResult");
target.customContent.put("customNumber", 15); target.customContent.put("customNumber", 15);
target.customContent.put("customProperty", true); target.customContent.put("customProperty", true);
@ -88,7 +87,7 @@ class JSONTest {
"""; """;
String completeMessageStructure = messageStructureStart + eventRepresentation + messageStructureEnd[1]; String completeMessageStructure = messageStructureStart + eventRepresentation + messageStructureEnd[1];
target.messageType = MessageType.EVENTS; // target.messageType = MessageType.EVENTS;
target.messages = targetEvents; target.messages = targetEvents;
assertThat(json.parse(completeMessageStructure)).isEqualTo(target); assertThat(json.parse(completeMessageStructure)).isEqualTo(target);

View File

@ -5,17 +5,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import net.jqwik.api.ForAll; import net.jqwik.api.ForAll;
import net.jqwik.api.Property; import net.jqwik.api.Property;
import net.jqwik.api.lifecycle.BeforeProperty; import net.jqwik.api.lifecycle.BeforeProperty;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import uulm.teamname.marvelous.gamelibrary.IntVector2; import uulm.teamname.marvelous.gamelibrary.IntVector2;
import java.util.Iterator; import java.util.Iterator;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.IntStream;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
class IntVector2DeserializerTest { class IntVector2DeserializerTest {

View File

@ -0,0 +1,353 @@
package uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize;
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 uulm.teamname.marvelous.gamelibrary.config.*;
import uulm.teamname.marvelous.gamelibrary.messages.*;
import static org.assertj.core.api.Assertions.*;
public class MessageDeserializerTest {
ObjectMapper mapper;
@BeforeEach
void beforeEach() {
mapper = new ObjectMapper();
}
@Test
void CharacterSelectionDeserializationTest() 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(
((CharacterSelectionMessage) mapper.readValue(jsonRepresentingMessage, BasicMessage.class)))
.isEqualTo(message);
}
@Test
void confirmSelectionTest() throws JsonProcessingException {
var jsonRepresentingMessage = """
{
"messageType":"CONFIRM_SELECTION",
"selectionComplete":true
}
""";
var message = new ConfirmSelectionMessage();
// message.messageType = MessageType.CONFIRM_SELECTION;
message.selectionComplete = true;
assertThat(mapper.readValue(jsonRepresentingMessage, ConfirmSelectionMessage.class))
.isEqualTo(message);
}
@Test
void errorTest() 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(mapper.readValue(jsonRepresentingMessage, ErrorMessage.class))
.isEqualTo(message);
}
@Test
void gameAssignmentTest() 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(mapper.readValue(jsonRepresentingMessage, GameAssignmentMessage.class))
.isEqualTo(message);
}
@Test
void testGameStructure() throws JsonProcessingException {
var jsonRepresentingGameStructure = """
{
"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}
};
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 = Assignment.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) mapper.readValue(jsonRepresentingGameStructure, BasicMessage.class))
.isEqualTo(message);
}
@Test
void generalAssignmentTest() throws JsonProcessingException {
var jsonRepresentingMessage = """
{
"messageType":"GENERAL_ASSIGNMENT",
"gameID":"6a39c3cf-26d8-409e-a309-45590f38ec4f"
}
""";
var message = new GeneralAssignmentMessage();
// message.messageType = MessageType.GENERAL_ASSIGNMENT;
message.gameID = "6a39c3cf-26d8-409e-a309-45590f38ec4f";
assertThat((GeneralAssignmentMessage) mapper.readValue(jsonRepresentingMessage, BasicMessage.class))
.isEqualTo(message);
}
}

View File

@ -6,13 +6,9 @@ import org.junit.jupiter.api.Test;
import uulm.teamname.marvelous.gamelibrary.IntVector2; import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.*; import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character; import uulm.teamname.marvelous.gamelibrary.entities.Character;
import uulm.teamname.marvelous.gamelibrary.entities.Rock;
import uulm.teamname.marvelous.gamelibrary.json.ingame.deserialize.EntityDeserializer;
import java.util.ArrayList; import java.util.ArrayList;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
class EntitySerializerTest { class EntitySerializerTest {

View File

@ -7,14 +7,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import uulm.teamname.marvelous.gamelibrary.IntVector2; import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.*; import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character;
import uulm.teamname.marvelous.gamelibrary.events.*; import uulm.teamname.marvelous.gamelibrary.events.*;
import java.util.HashMap; import java.util.HashMap;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class EventSerializerTest { public class EventSerializerTest {
//System.out.println(mapper.writeValueAsString(gse)); //System.out.println(mapper.writeValueAsString(gse));
@ -289,7 +286,7 @@ public class EventSerializerTest {
CustomEvent ce = new CustomEvent(); CustomEvent ce = new CustomEvent();
ce.type = EventType.CustomEvent; ce.type = EventType.CustomEvent;
ce.teamIdentifier ="identity"; ce.teamIdentifier ="identity";
ce.customContent = new HashMap<String, Object>(1,1); ce.customContent = new HashMap<>(1, 1);
var jsonRepresentingEE = """ var jsonRepresentingEE = """

View File

@ -6,8 +6,6 @@ import net.jqwik.api.*;
import net.jqwik.api.lifecycle.BeforeProperty; import net.jqwik.api.lifecycle.BeforeProperty;
import uulm.teamname.marvelous.gamelibrary.IntVector2; 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.*; import static org.assertj.core.api.Assertions.*;
class IntVector2SerializerTest { class IntVector2SerializerTest {

View File

@ -97,8 +97,8 @@ public class RequestSerializerTest {
// Note that everything that follows could be extracted into another class, // Note that everything that follows could be extracted into another class,
// but that's complicated, so I won't do it // but that's complicated, so I won't do it
static Set<RequestType> characterRequestTypes; static final Set<RequestType> characterRequestTypes;
static Set<RequestType> gameRequestTypes; static final Set<RequestType> gameRequestTypes;
static { static {
characterRequestTypes = new HashSet<>(); characterRequestTypes = new HashSet<>();
@ -183,7 +183,7 @@ public class RequestSerializerTest {
} else { } else {
actualID = id; actualID = id;
} }
return new EntityID(type, id); return new EntityID(type, actualID);
}); });
} }
@ -204,8 +204,9 @@ public class RequestSerializerTest {
.map(pos -> new IntVector2(pos.get1(), pos.get2())); .map(pos -> new IntVector2(pos.get1(), pos.get2()));
} }
@Provide("attackPositions")
/** Returns tuples of origin vectors (of an attack), and the vector pointing to the attack dir */ /** Returns tuples of origin vectors (of an attack), and the vector pointing to the attack dir */
@Provide("attackPositions")
private Arbitrary<Tuple.Tuple2<IntVector2, IntVector2>> attackPositions() { private Arbitrary<Tuple.Tuple2<IntVector2, IntVector2>> attackPositions() {
return Combinators.combine(randomPositions(), directions().tuple5()) return Combinators.combine(randomPositions(), directions().tuple5())
.as((origin, dir) -> { .as((origin, dir) -> {

View File

@ -1,17 +1,12 @@
package uulm.teamname.marvelous.gamelibrary.requests; package uulm.teamname.marvelous.gamelibrary.requests;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import uulm.teamname.marvelous.gamelibrary.IntVector2; import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.*; import uulm.teamname.marvelous.gamelibrary.entities.*;
import uulm.teamname.marvelous.gamelibrary.entities.Character;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
class RequestBuilderTest { class RequestBuilderTest {
@ -52,8 +47,8 @@ class RequestBuilderTest {
map.put(1,StoneType.SoulStone); map.put(1,StoneType.SoulStone);
cr3.stoneType = StoneType.valueOf(1); cr3.stoneType = StoneType.valueOf(1);
assertEquals(cr.equals(cr2), true); assertTrue(cr.equals(cr2));
assertEquals(cr.equals(cr3), false); assertFalse(cr.equals(cr3));
assertEquals(cr.hashCode(), cr2.hashCode()); assertEquals(cr.hashCode(), cr2.hashCode());
assertNotEquals(cr.hashCode(), cr3.hashCode()); assertNotEquals(cr.hashCode(), cr3.hashCode());
@ -87,7 +82,7 @@ class RequestBuilderTest {
//since we tested in the test before that the equals() method from the CharacterRequest class works fine //since we tested in the test before that the equals() method from the CharacterRequest class works fine
// we can use this method here. and do not have to test all properties for itself, e.g.: "assertEquals(cr.targetEntity, cr2.targetEntity)"; // we can use this method here. and do not have to test all properties for itself, e.g.: "assertEquals(cr.targetEntity, cr2.targetEntity)";
assertEquals(cr.equals(cr2), true); assertTrue(cr.equals(cr2));
} }