From 19bad7dabf9d15d781bdfc3108e398304805b2b3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 2 Sep 2025 21:30:02 +0200 Subject: [PATCH] fancynpcs: Fix tests --- .../de/oliver/plugintests/utils/Delay.java | 19 ++++ .../tests/commands/ActionCMDTest.java | 73 +++++++----- .../tests/commands/CreateCMDTest.java | 105 +++++++++++------- .../tests/commands/DisplayNameCMDTest.java | 20 +++- .../tests/commands/TurnToPlayerCMDTest.java | 11 +- .../fancynpcs/tests/commands/TypeCMDTest.java | 13 +-- 6 files changed, 155 insertions(+), 86 deletions(-) create mode 100644 libraries/plugin-tests/src/main/java/de/oliver/plugintests/utils/Delay.java diff --git a/libraries/plugin-tests/src/main/java/de/oliver/plugintests/utils/Delay.java b/libraries/plugin-tests/src/main/java/de/oliver/plugintests/utils/Delay.java new file mode 100644 index 00000000..7419148c --- /dev/null +++ b/libraries/plugin-tests/src/main/java/de/oliver/plugintests/utils/Delay.java @@ -0,0 +1,19 @@ +package de.oliver.plugintests.utils; + +import java.util.concurrent.*; + +public class Delay { + + private static final ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(10); + + public static void delay(Runnable runnable) { + ScheduledFuture f = EXECUTOR.schedule(runnable, 10, TimeUnit.MILLISECONDS); + + try { + f.get(100, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + System.out.println("Delay interrupted: " + e.getMessage()); + } + } + +} diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/ActionCMDTest.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/ActionCMDTest.java index 7c8eef6d..b32d92e6 100644 --- a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/ActionCMDTest.java +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/ActionCMDTest.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; import static de.oliver.plugintests.Expectable.expect; +import static de.oliver.plugintests.utils.Delay.delay; public class ActionCMDTest { @@ -47,9 +48,11 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " add " + actionType + " " + actionValue)).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(1); - expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(actionType); - expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(actionValue); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(1); + expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(actionType); + expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(actionValue); + }); } @FPTest(name = "Add action before") @@ -63,11 +66,13 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " add_before 1 " + actionType + " " + actionValue)).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); - expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(actionType); - expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(actionValue); - expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(existingAction.action().getName()); - expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(existingAction.value()); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); + expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(actionType); + expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(actionValue); + expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(existingAction.action().getName()); + expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(existingAction.value()); + }); } @FPTest(name = "Add action after") @@ -81,11 +86,13 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " add_after 1 " + actionType + " " + actionValue)).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); - expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(existingAction.action().getName()); - expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(existingAction.value()); - expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(actionType); - expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(actionValue); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); + expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(existingAction.action().getName()); + expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(existingAction.value()); + expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(actionType); + expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(actionValue); + }); } @FPTest(name = "Set action") @@ -99,9 +106,11 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " set 1 " + actionType + " " + actionValue)).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(1); - expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(actionType); - expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(actionValue); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(1); + expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(actionType); + expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(actionValue); + }); } @FPTest(name = "Remove action") @@ -112,7 +121,9 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " remove 1")).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(0); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(0); + }); } @FPTest(name = "Move action up") @@ -124,11 +135,13 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " move_up 2")).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); - expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(existingAction2.action().getName()); - expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(existingAction2.value()); - expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(existingAction1.action().getName()); - expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(existingAction1.value()); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); + expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(existingAction2.action().getName()); + expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(existingAction2.value()); + expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(existingAction1.action().getName()); + expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(existingAction1.value()); + }); } @FPTest(name = "Move action down") @@ -140,11 +153,13 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " move_down 1")).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); - expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(existingAction2.action().getName()); - expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(existingAction2.value()); - expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(existingAction1.action().getName()); - expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(existingAction1.value()); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(2); + expect(npc.getData().getActions(actionTrigger).getFirst().action().getName()).toEqual(existingAction2.action().getName()); + expect(npc.getData().getActions(actionTrigger).getFirst().value()).toEqual(existingAction2.value()); + expect(npc.getData().getActions(actionTrigger).getLast().action().getName()).toEqual(existingAction1.action().getName()); + expect(npc.getData().getActions(actionTrigger).getLast().value()).toEqual(existingAction1.value()); + }); } @FPTest(name = "Clear actions") @@ -155,7 +170,9 @@ public class ActionCMDTest { expect(player.performCommand("npc action " + npcName + " " + actionTrigger + " clear")).toBe(true); - expect(npc.getData().getActions(actionTrigger).size()).toEqual(0); + delay(() -> { + expect(npc.getData().getActions(actionTrigger).size()).toEqual(0); + }); } } diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/CreateCMDTest.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/CreateCMDTest.java index 2079b330..753df647 100644 --- a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/CreateCMDTest.java +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/CreateCMDTest.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import java.util.UUID; import static de.oliver.plugintests.Expectable.expect; +import static de.oliver.plugintests.utils.Delay.delay; public class CreateCMDTest { @@ -43,103 +44,121 @@ public class CreateCMDTest { public void createNpc(Player player) { expect(player.performCommand("npc create " + npcName)).toBe(true); - createdNpc = NPC_MANAGER.getNpc(npcName); - expect(createdNpc).toBeDefined(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc(npcName); + expect(createdNpc).toBeDefined(); - expect(createdNpc.getEntityId()).toBeGreaterThan(-1); + expect(createdNpc.getEntityId()).toBeGreaterThan(-1); - expect(createdNpc.getData().getName()).toEqual(npcName); - expect(createdNpc.getData().getType()).toEqual(EntityType.PLAYER); - expect(createdNpc.getData().getLocation()).toBeDefined(); - expect(createdNpc.getData().getLocation().getWorld().getName()).toEqual(player.getWorld().getName()); - expect(createdNpc.getData().getCreator()).toEqual(player.getUniqueId()); + expect(createdNpc.getData().getName()).toEqual(npcName); + expect(createdNpc.getData().getType()).toEqual(EntityType.PLAYER); + expect(createdNpc.getData().getLocation()).toBeDefined(); + expect(createdNpc.getData().getLocation().getWorld().getName()).toEqual(player.getWorld().getName()); + expect(createdNpc.getData().getCreator()).toEqual(player.getUniqueId()); + }); } @FPTest(name = "Create npc with type") public void createNpcWithType(Player player) { expect(player.performCommand("npc create " + npcName + " --type PIG")).toBe(true); - createdNpc = NPC_MANAGER.getNpc(npcName); - expect(createdNpc).toBeDefined(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc(npcName); + expect(createdNpc).toBeDefined(); - expect(createdNpc.getEntityId()).toBeGreaterThan(-1); + expect(createdNpc.getEntityId()).toBeGreaterThan(-1); - expect(createdNpc.getData().getType()).toEqual(EntityType.PIG); + expect(createdNpc.getData().getType()).toEqual(EntityType.PIG); + }); } @FPTest(name = "Create npc with location") public void createNpcWithLocation(Player player) { expect(player.performCommand("npc create " + npcName + " --location 12 154 842")).toBe(true); - createdNpc = NPC_MANAGER.getNpc(npcName); - expect(createdNpc).toBeDefined(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc(npcName); + expect(createdNpc).toBeDefined(); - expect(createdNpc.getEntityId()).toBeGreaterThan(-1); + expect(createdNpc.getEntityId()).toBeGreaterThan(-1); - expect(createdNpc.getData().getLocation().x()).toEqual(12d); - expect(createdNpc.getData().getLocation().y()).toEqual(154d); - expect(createdNpc.getData().getLocation().z()).toEqual(842d); + expect(createdNpc.getData().getLocation().x()).toEqual(12d); + expect(createdNpc.getData().getLocation().y()).toEqual(154d); + expect(createdNpc.getData().getLocation().z()).toEqual(842d); + }); } @FPTest(name = "Create npc with world") public void createNpcWithWorld(Player player) { - String worldName = "world_the_nether"; - if (Bukkit.getWorld(worldName) == null) { + String worldName; + if (Bukkit.getWorld("world_the_nether") == null) { worldName = "world"; + } else { + worldName = "world_the_nether"; } expect(player.performCommand("npc create " + npcName + " --world " + worldName)).toBe(true); - createdNpc = NPC_MANAGER.getNpc(npcName); - expect(createdNpc).toBeDefined(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc(npcName); + expect(createdNpc).toBeDefined(); - expect(createdNpc.getEntityId()).toBeGreaterThan(-1); + expect(createdNpc.getEntityId()).toBeGreaterThan(-1); - expect(createdNpc.getData().getLocation().getWorld().getName()).toEqual(worldName); + expect(createdNpc.getData().getLocation().getWorld().getName()).toEqual(worldName); + }); } @FPTest(name = "Create npc with invalid name") public void createNpcWithInvalidName(Player player) { expect(player.performCommand("npc create " + "invalid.name")).toBe(true); - createdNpc = NPC_MANAGER.getNpc("invalid.name"); - expect(createdNpc).toBeNull(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc("invalid.name"); + expect(createdNpc).toBeNull(); + }); } @FPTest(name = "Create npc with existing name") public void createNpcWithExistingName(Player player) { expect(player.performCommand("npc create " + npcName)).toBe(true); - createdNpc = NPC_MANAGER.getNpc(npcName); - expect(createdNpc).toBeDefined(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc(npcName); + expect(createdNpc).toBeDefined(); - expect(player.performCommand("npc create " + npcName)).toBe(true); + expect(player.performCommand("npc create " + npcName)).toBe(true); - Npc existingNpc = NPC_MANAGER.getNpc(npcName); - expect(existingNpc).toBeDefined(); + Npc existingNpc = NPC_MANAGER.getNpc(npcName); + expect(existingNpc).toBeDefined(); - expect(existingNpc.getEntityId()).toBeGreaterThan(-1); - expect(existingNpc).toEqual(createdNpc); + expect(existingNpc.getEntityId()).toBeGreaterThan(-1); + expect(existingNpc).toEqual(createdNpc); + }); } @FPTest(name = "Create npc with all flags") public void createNpcWithAllFlags(Player player) { - String worldName = "world_the_nether"; - if (Bukkit.getWorld(worldName) == null) { + String worldName; + if (Bukkit.getWorld("world_the_nether") == null) { worldName = "world"; + } else { + worldName = "world_the_nether"; } expect(player.performCommand("npc create " + npcName + " --type COW --location 137 131 -571 --world " + worldName)).toBe(true); - createdNpc = NPC_MANAGER.getNpc(npcName); - expect(createdNpc).toBeDefined(); + delay(() -> { + createdNpc = NPC_MANAGER.getNpc(npcName); + expect(createdNpc).toBeDefined(); - expect(createdNpc.getEntityId()).toBeGreaterThan(-1); + expect(createdNpc.getEntityId()).toBeGreaterThan(-1); - expect(createdNpc.getData().getType()).toEqual(EntityType.COW); - expect(createdNpc.getData().getLocation().x()).toEqual(137d); - expect(createdNpc.getData().getLocation().y()).toEqual(131d); - expect(createdNpc.getData().getLocation().z()).toEqual(-571d); - expect(createdNpc.getData().getLocation().getWorld().getName()).toEqual(worldName); + expect(createdNpc.getData().getType()).toEqual(EntityType.COW); + expect(createdNpc.getData().getLocation().x()).toEqual(137d); + expect(createdNpc.getData().getLocation().y()).toEqual(131d); + expect(createdNpc.getData().getLocation().z()).toEqual(-571d); + expect(createdNpc.getData().getLocation().getWorld().getName()).toEqual(worldName); + }); } } diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/DisplayNameCMDTest.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/DisplayNameCMDTest.java index c2a4a8e6..4d665b12 100644 --- a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/DisplayNameCMDTest.java +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/DisplayNameCMDTest.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import java.util.List; import static de.oliver.plugintests.Expectable.expect; +import static de.oliver.plugintests.utils.Delay.delay; public class DisplayNameCMDTest { @@ -37,19 +38,28 @@ public class DisplayNameCMDTest { public void setDisplayName(Player player) { String displayName = "Test Display Name"; expect(player.performCommand("npc displayname " + npcName + " " + displayName)).toBe(true); - expect(npc.getData().getDisplayName()).toEqual(displayName); + + delay(() -> { + expect(npc.getData().getDisplayName()).toEqual(displayName); + }); } @FPTest(name = "Set display name to none") public void setDisplayNameToNone(Player player) { expect(player.performCommand("npc displayname " + npcName + " @none")).toBe(true); - expect(npc.getData().getDisplayName()).toEqual(""); + + delay(() -> { + expect(npc.getData().getDisplayName()).toEqual(""); + }); } @FPTest(name = "Set display name to empty") public void setDisplayNameToEmpty(Player player) { expect(player.performCommand("npc displayname " + npcName + " ")).toBe(true); - expect(npc.getData().getDisplayName()).toEqual(""); + + delay(() -> { + expect(npc.getData().getDisplayName()).toEqual(""); + }); } @FPTest(name = "Set display name with blocked command") @@ -62,7 +72,9 @@ public class DisplayNameCMDTest { expect(player.performCommand("npc displayname " + npcName + " hello")).toBe(true); - expect(npc.getData().getDisplayName()).toEqual(npcName); + delay(() -> { + expect(npc.getData().getDisplayName()).toEqual(npcName); + }); } } diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TurnToPlayerCMDTest.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TurnToPlayerCMDTest.java index b2cfff54..147d0a30 100644 --- a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TurnToPlayerCMDTest.java +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TurnToPlayerCMDTest.java @@ -8,6 +8,7 @@ import de.oliver.plugintests.annotations.FPTest; import org.bukkit.entity.Player; import static de.oliver.plugintests.Expectable.expect; +import static de.oliver.plugintests.utils.Delay.delay; public class TurnToPlayerCMDTest { @@ -33,7 +34,10 @@ public class TurnToPlayerCMDTest { @FPTest(name = "Set turnToPlayer to true") public void setTurnToPlayerToTrue(Player player) { expect(player.performCommand("npc turn_to_player " + npcName + " true")).toBe(true); - expect(npc.getData().isTurnToPlayer()).toBe(true); + + delay(() -> { + expect(npc.getData().isTurnToPlayer()).toBe(true); + }); } @FPTest(name = "Set turnToPlayer to false") @@ -41,7 +45,10 @@ public class TurnToPlayerCMDTest { npc.getData().setTurnToPlayer(true); expect(player.performCommand("npc turn_to_player " + npcName + " false")).toBe(true); - expect(npc.getData().isTurnToPlayer()).toBe(false); + + delay(() -> { + expect(npc.getData().isTurnToPlayer()).toBe(false); + }); } } diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TypeCMDTest.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TypeCMDTest.java index a66c80f7..388204e4 100644 --- a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TypeCMDTest.java +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/commands/TypeCMDTest.java @@ -9,6 +9,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import static de.oliver.plugintests.Expectable.expect; +import static de.oliver.plugintests.utils.Delay.delay; public class TypeCMDTest { @@ -34,15 +35,9 @@ public class TypeCMDTest { @FPTest(name = "Set type to COW") public void setTypeToCow(Player player) { expect(player.performCommand("npc type " + npcName + " COW")).toBe(true); - expect(npc.getData().getType()).toBe(EntityType.COW); - } - @FPTest(name = "Set type to COW with showInTab") - public void setTypeToCowWithShowInTab(Player player) { - npc.getData().setShowInTab(true); - expect(player.performCommand("npc type " + npcName + " COW")).toBe(true); - - expect(npc.getData().getType()).toBe(EntityType.COW); - expect(npc.getData().isShowInTab()).toBe(false); + delay(() -> { + expect(npc.getData().getType()).toBe(EntityType.COW); + }); } }