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; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import uulm.teamname.marvelous.gamelibrary.entities.EntityID; import uulm.teamname.marvelous.gamelibrary.events.Event; import uulm.teamname.marvelous.gamelibrary.events.EventBuilder; import uulm.teamname.marvelous.gamelibrary.events.EventType; import uulm.teamname.marvelous.gamelibrary.messages.server.EventMessage; import java.util.*; class JSONTest { String messageStructureStart; /** 0 is REQUESTS, 1 is EVENTS */ String[] messageStructureEnd; /** Still need to add: messages, messageType */ EventMessage target; JSON json; // TODO: add proper CharacterConfig, otherwise Character events won't be deserializable @BeforeEach void setUp() { messageStructureStart = """ { "messages":[ """; messageStructureEnd = new String[]{ """ ], "messageType": "REQUESTS", "customContentType": "TestCustomContent", "customContent": { "customKey" = "customResult", "customNumber" = 15, "customProperty" = true } """, """ ], "messageType": "EVENTS", "customContentType": "TestCustomContent", "customContent": { "customKey": "customResult", "customNumber": 15, "customProperty": true } } """, }; target = new EventMessage(); target.customContentType = "TestCustomContent"; target.customContent = new HashMap<>(); target.customContent.put("customKey", "customResult"); target.customContent.put("customNumber", 15); target.customContent.put("customProperty", true); this.json = new JSON(null); // FIXME: Temporary hotfix, nothing valid yet } @AfterEach void tearDown() { } @Test void parseNotificationEvents() { Event[] targetEvents = { new EventBuilder(EventType.Ack).buildGameStateEvent(), new EventBuilder(EventType.Nack).buildGameStateEvent(), }; String eventRepresentation = """ {"eventType": "Ack"}, {"eventType": "Nack"} """; String completeMessageStructure = messageStructureStart + eventRepresentation + messageStructureEnd[1]; // target.messageType = MessageType.EVENTS; target.messages = targetEvents; assertThat(json.parse(completeMessageStructure)).isEqualTo(target); } @Test @Disabled void parseMoreComplicatedEvents() { String eventRepresentation = """ { "eventType": "GamestateEvent", "activeCharacter": {"entityID": "P2", "ID": 4}, "turnOrder": [ {"entityID": "P2", "ID": 4}, {"entityID": "P2", "ID": 2}, {"entityID": "P1", "ID": 3}, {"entityID": "NPC", "ID": 1}, {"entityID": "InfinityStones", "ID": 5}, {"entityID": "Rocks", "ID": 0} ] } """; String completeMessageStructure = messageStructureStart + eventRepresentation + messageStructureEnd[1]; System.out.println(json.parse(completeMessageStructure)); } @Test @Disabled void simpleInDevTest() throws JsonProcessingException { String simpleEntity = """ { "entityID": "P2", "ID": 4 } """; System.out.println(new ObjectMapper().readValue(simpleEntity, EntityID.class)); } @Test void stringify() { } }