From 3fd77c09f125fd5d5628924a37c4aa6afd253134 Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 29 May 2025 12:35:14 -0400 Subject: [PATCH] more tests around movement components --- docs/src/progress/renderertodo.md | 1 + .../client/ClientSynchronizationManager.java | 6 +- .../server/ServerSynchronizationManager.java | 6 +- .../state/gravity/ClientGravityTreeTests.java | 60 +++++++++++++++++ .../movement/jump/ClientJumpTreeTests.java | 67 +++++++++++++++++++ .../movement/jump/ServerJumpTreeTests.java | 67 +++++++++++++++++++ 6 files changed, 202 insertions(+), 5 deletions(-) create mode 100644 src/test/java/electrosphere/entity/state/gravity/ClientGravityTreeTests.java create mode 100644 src/test/java/electrosphere/entity/state/movement/jump/ClientJumpTreeTests.java create mode 100644 src/test/java/electrosphere/entity/state/movement/jump/ServerJumpTreeTests.java diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 9e9f612e..be1b056d 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2057,6 +2057,7 @@ Rendering engine legacy code reorganization Code cleanup work Logging for loading thread failure Code cleanup +More tests diff --git a/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java b/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java index 10bb849f..5cd56048 100644 --- a/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java +++ b/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java @@ -53,17 +53,17 @@ public class ClientSynchronizationManager { /** * The list of messages to loop through */ - List messages = new CopyOnWriteArrayList(); + private List messages = new CopyOnWriteArrayList(); /** * Map that tracks the number of times a network message bounces */ - Map messageBounceCount = new HashMap(); + private Map messageBounceCount = new HashMap(); /** * The list of Ids that the server has said to destroy */ - Map deletedEntityIds = new HashMap(); + private Map deletedEntityIds = new HashMap(); /** * Pushes a message into the queue to be processed diff --git a/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java b/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java index aa1057cf..dfec9cb0 100644 --- a/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java +++ b/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java @@ -31,8 +31,10 @@ public class ServerSynchronizationManager { public static final int SERVER_SYNC_INTERRUPT = 1; - //The list of messages to loop through - List messages = new LinkedList(); + /** + * The list of messages to loop through + */ + private List messages = new LinkedList(); /** * Pushes a message into the queue to be processed diff --git a/src/test/java/electrosphere/entity/state/gravity/ClientGravityTreeTests.java b/src/test/java/electrosphere/entity/state/gravity/ClientGravityTreeTests.java new file mode 100644 index 00000000..de45c199 --- /dev/null +++ b/src/test/java/electrosphere/entity/state/gravity/ClientGravityTreeTests.java @@ -0,0 +1,60 @@ +package electrosphere.entity.state.gravity; + +import static electrosphere.test.testutils.Assertions.assertEventually; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.joml.Vector3d; + +import electrosphere.engine.Globals; +import electrosphere.entity.Entity; +import electrosphere.entity.state.movement.jump.ClientJumpTree; +import electrosphere.entity.types.EntityTypes.EntityType; +import electrosphere.entity.types.creature.CreatureUtils; +import electrosphere.entity.types.creature.ObjectTemplate; +import electrosphere.test.annotations.IntegrationTest; +import electrosphere.test.template.EntityTestTemplate; +import electrosphere.test.testutils.TestEngineUtils; + +/** + * Tests client gravity tree + */ +public class ClientGravityTreeTests extends EntityTestTemplate { + + @IntegrationTest + public void isActive_AtRest_false(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientGravityTree clientGravityTree = ClientGravityTree.getClientGravityTree(clientEntity); + assertEquals(false, clientGravityTree.isActive()); + } + + @IntegrationTest + public void activates_on_jump(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientJumpTree clientJumpTree = ClientJumpTree.getClientJumpTree(clientEntity); + clientJumpTree.start(); + + ClientGravityTree clientGravityTree = ClientGravityTree.getClientGravityTree(clientEntity); + + assertEventually(() -> clientGravityTree.isActive()); + } + + @IntegrationTest + public void deactivates_on_collide_world_bound(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientJumpTree clientJumpTree = ClientJumpTree.getClientJumpTree(clientEntity); + clientJumpTree.start(); + + ClientGravityTree clientGravityTree = ClientGravityTree.getClientGravityTree(clientEntity); + + assertEventually(() -> clientGravityTree.isActive()); + + assertEventually(() -> !clientGravityTree.isActive()); + } + +} diff --git a/src/test/java/electrosphere/entity/state/movement/jump/ClientJumpTreeTests.java b/src/test/java/electrosphere/entity/state/movement/jump/ClientJumpTreeTests.java new file mode 100644 index 00000000..a57f4c9e --- /dev/null +++ b/src/test/java/electrosphere/entity/state/movement/jump/ClientJumpTreeTests.java @@ -0,0 +1,67 @@ +package electrosphere.entity.state.movement.jump; + +import static electrosphere.test.testutils.Assertions.assertEventually; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.joml.Vector3d; + +import electrosphere.engine.Globals; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityUtils; +import electrosphere.entity.types.EntityTypes.EntityType; +import electrosphere.entity.types.creature.CreatureUtils; +import electrosphere.entity.types.creature.ObjectTemplate; +import electrosphere.test.annotations.IntegrationTest; +import electrosphere.test.template.EntityTestTemplate; +import electrosphere.test.testutils.TestEngineUtils; + +/** + * Tests the client jump tree + */ +public class ClientJumpTreeTests extends EntityTestTemplate { + + @IntegrationTest + public void isJumping_AtRest_false(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientJumpTree clientJumpTree = ClientJumpTree.getClientJumpTree(clientEntity); + assertEquals(false, clientJumpTree.isJumping()); + } + + @IntegrationTest + public void isJumping_WhileJumping_true(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientJumpTree clientJumpTree = ClientJumpTree.getClientJumpTree(clientEntity); + clientJumpTree.start(); + + assertEventually(() -> clientJumpTree.isJumping()); + } + + @IntegrationTest + public void isJumping_AfterLanding_false(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientJumpTree clientJumpTree = ClientJumpTree.getClientJumpTree(clientEntity); + clientJumpTree.start(); + + assertEventually(() -> clientJumpTree.isJumping()); + + assertEventually(() -> !clientJumpTree.isJumping()); + } + + @IntegrationTest + public void verticalMovement_WhileJumping_true(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + Entity clientEntity = TestEngineUtils.getClientEquivalent(serverEntity); + + ClientJumpTree clientJumpTree = ClientJumpTree.getClientJumpTree(clientEntity); + clientJumpTree.start(); + + assertEventually(() -> EntityUtils.getPosition(clientEntity).y > 0.3); + } + +} diff --git a/src/test/java/electrosphere/entity/state/movement/jump/ServerJumpTreeTests.java b/src/test/java/electrosphere/entity/state/movement/jump/ServerJumpTreeTests.java new file mode 100644 index 00000000..52b45a19 --- /dev/null +++ b/src/test/java/electrosphere/entity/state/movement/jump/ServerJumpTreeTests.java @@ -0,0 +1,67 @@ +package electrosphere.entity.state.movement.jump; + +import static electrosphere.test.testutils.Assertions.assertEventually; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.joml.Vector3d; + +import electrosphere.engine.Globals; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityUtils; +import electrosphere.entity.types.EntityTypes.EntityType; +import electrosphere.entity.types.creature.CreatureUtils; +import electrosphere.entity.types.creature.ObjectTemplate; +import electrosphere.test.annotations.IntegrationTest; +import electrosphere.test.template.EntityTestTemplate; + +/** + * Tests the server jump tree + */ +public class ServerJumpTreeTests extends EntityTestTemplate { + + /** + * Expected height that a jump would get us to + */ + static final double EXPECTED_HEIGHT = 0.5; + + @IntegrationTest + public void isJumping_AtRest_false(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + + ServerJumpTree serverJumpTree = ServerJumpTree.getServerJumpTree(serverEntity); + assertEquals(false, serverJumpTree.isJumping()); + } + + @IntegrationTest + public void isJumping_WhileJumping_true(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + + ServerJumpTree serverJumpTree = ServerJumpTree.getServerJumpTree(serverEntity); + serverJumpTree.start(); + + assertEventually(() -> serverJumpTree.isJumping()); + } + + @IntegrationTest + public void isJumping_AfterLanding_false(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + + ServerJumpTree serverJumpTree = ServerJumpTree.getServerJumpTree(serverEntity); + serverJumpTree.start(); + + assertEventually(() -> serverJumpTree.isJumping()); + + assertEventually(() -> !serverJumpTree.isJumping()); + } + + @IntegrationTest + public void verticalMovement_WhileJumping_true(){ + Entity serverEntity = CreatureUtils.serverSpawnBasicCreature(Globals.serverState.realmManager.first(), new Vector3d(), "human", ObjectTemplate.createDefault(EntityType.CREATURE, "human")); + + ServerJumpTree serverJumpTree = ServerJumpTree.getServerJumpTree(serverEntity); + serverJumpTree.start(); + + assertEventually(() -> EntityUtils.getPosition(serverEntity).y > EXPECTED_HEIGHT); + } + +}