From 0f1aed81562082cb3b606d5ecff93e270d1813ce Mon Sep 17 00:00:00 2001 From: alexcrea Date: Fri, 25 Jul 2025 06:30:19 +0200 Subject: [PATCH] Add some more event listener test --- .../cuanvil/anvil/AnvilFuseTests.java | 63 +++++++------------ .../CAClickResultBypassEventTest.java | 7 +++ .../CAEarlyPreAnvilBypassEventTest.java | 44 +++++++++++++ .../listener/CAPreAnvilBypassEventTest.java | 44 +++++++++++++ .../listener/CATreatAnvilResultEventTest.java | 7 +++ .../listener/NoStartupTriggerEventTest.java | 53 ++++++++++++++++ .../alexcrea/cuanvil/util/CommonItemUtil.java | 9 ++- 7 files changed, 183 insertions(+), 44 deletions(-) create mode 100644 src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAClickResultBypassEventTest.java create mode 100644 src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAEarlyPreAnvilBypassEventTest.java create mode 100644 src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAPreAnvilBypassEventTest.java create mode 100644 src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEventTest.java create mode 100644 src/test/java/xyz/alexcrea/cuanvil/api/event/listener/NoStartupTriggerEventTest.java diff --git a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java index 19f1d6f..111f9fe 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java @@ -51,57 +51,38 @@ public class AnvilFuseTests extends SharedCustomAnvilTest { anvil = null; } + public static AnvilFuseTestData mergeFuseData(Integer levelLeft, Integer levelRight, Integer levelResult) { + ItemStack result = CommonItemUtil.sharpness(levelResult); + if(result != null){ + Repairable meta = (Repairable) result.getItemMeta(); + meta.setRepairCost(1); + result.setItemMeta(meta); + } + + return new AnvilFuseTestData( + CommonItemUtil.sharpness(levelLeft), + CommonItemUtil.sharpness(levelRight), + result, + levelResult + ); + } + @Test public void mergeFuseTest(){ - // Literally just test a sharpness 4 + sharpness 4 - ItemStack sharpness4 = CommonItemUtil.sharpness(4); - - ItemStack sharpness5Result = CommonItemUtil.sharpness(5); - Repairable meta = (Repairable) sharpness5Result.getItemMeta(); - meta.setRepairCost(1); - sharpness5Result.setItemMeta(meta); - - AnvilFuseTestData data = new AnvilFuseTestData( - sharpness4, sharpness4, - sharpness5Result, - 5 - ); - - data.executeTest(anvil, player); + mergeFuseData(4, 4, 5) + .executeTest(anvil, player); } @Test public void overFuseTest(){ - // Test sharpness 4 + sharpness 5 - ItemStack sharpness4 = CommonItemUtil.sharpness(4); - ItemStack sharpness5 = CommonItemUtil.sharpness(5); - - ItemStack sharpness5Result = CommonItemUtil.sharpness(5); - Repairable meta = (Repairable) sharpness5Result.getItemMeta(); - meta.setRepairCost(1); - sharpness5Result.setItemMeta(meta); - - AnvilFuseTestData data = new AnvilFuseTestData( - sharpness4, sharpness5, - sharpness5Result, - 5 - ); - - data.executeTest(anvil, player); + mergeFuseData(4, 5, 5) + .executeTest(anvil, player); } @Test public void underFuseTest(){ - // test sharpness 5 + 4. Custom Anvil should not allow it to be as it result as the same item as left item - ItemStack sharpness4 = CommonItemUtil.sharpness(4); - ItemStack sharpness5 = CommonItemUtil.sharpness(5); - - AnvilFuseTestData data = new AnvilFuseTestData( - sharpness5, sharpness4, - null - ); - - data.executeTest(anvil, player); + mergeFuseData(5, 4, null) + .executeTest(anvil, player); } // Note: currently anvil can only have null name. maybe handle differently later diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAClickResultBypassEventTest.java b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAClickResultBypassEventTest.java new file mode 100644 index 0000000..91a0637 --- /dev/null +++ b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAClickResultBypassEventTest.java @@ -0,0 +1,7 @@ +package xyz.alexcrea.cuanvil.api.event.listener; + +public class CAClickResultBypassEventTest { + + //TODO + +} \ No newline at end of file diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAEarlyPreAnvilBypassEventTest.java b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAEarlyPreAnvilBypassEventTest.java new file mode 100644 index 0000000..2f6605d --- /dev/null +++ b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAEarlyPreAnvilBypassEventTest.java @@ -0,0 +1,44 @@ +package xyz.alexcrea.cuanvil.api.event.listener; + +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockbukkit.mockbukkit.matcher.plugin.PluginManagerFiredEventClassMatcher; +import xyz.alexcrea.cuanvil.anvil.AnvilFuseTests; + +public class CAEarlyPreAnvilBypassEventTest extends NoStartupTriggerEventTest { + + @Override + public Class getEventClass() { + return CAEarlyPreAnvilBypassEvent.class; + } + + @Test + public void startup() { + Bukkit.getPluginManager().registerEvents(new Listener() { + @EventHandler + public void onEvent(CAEarlyPreAnvilBypassEvent event){ + event.setCancelled(true); + } + + }, plugin); + + AnvilFuseTests.mergeFuseData(4, 4, null) + .executeTest(anvil, player); + + boolean postEventEarly = PluginManagerFiredEventClassMatcher + .hasFiredEventInstance(CAEarlyPreAnvilBypassEvent.class) + .matches(server.getPluginManager()); + + boolean postEvent = PluginManagerFiredEventClassMatcher + .hasFiredEventInstance(CAPreAnvilBypassEvent.class) + .matches(server.getPluginManager()); + + Assertions.assertTrue(postEventEarly, "early pre event did not get fired"); + Assertions.assertFalse(postEvent, "pre event did get fired even with early cancellation"); + } + +} \ No newline at end of file diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAPreAnvilBypassEventTest.java b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAPreAnvilBypassEventTest.java new file mode 100644 index 0000000..7de6a08 --- /dev/null +++ b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CAPreAnvilBypassEventTest.java @@ -0,0 +1,44 @@ +package xyz.alexcrea.cuanvil.api.event.listener; + +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockbukkit.mockbukkit.matcher.plugin.PluginManagerFiredEventClassMatcher; +import xyz.alexcrea.cuanvil.anvil.AnvilFuseTests; + +public class CAPreAnvilBypassEventTest extends NoStartupTriggerEventTest { + + @Override + public Class getEventClass() { + return CAPreAnvilBypassEvent.class; + } + + @Test + public void startup() { + Bukkit.getPluginManager().registerEvents(new Listener() { + @EventHandler + public void onEvent(CAPreAnvilBypassEvent event){ + event.setCancelled(true); + } + + }, plugin); + + AnvilFuseTests.mergeFuseData(4, 4, null) + .executeTest(anvil, player); + + boolean postEventEarly = PluginManagerFiredEventClassMatcher + .hasFiredEventInstance(CAEarlyPreAnvilBypassEvent.class) + .matches(server.getPluginManager()); + + boolean postEvent = PluginManagerFiredEventClassMatcher + .hasFiredEventInstance(CAPreAnvilBypassEvent.class) + .matches(server.getPluginManager()); + + Assertions.assertTrue(postEventEarly, "early pre event did not get fired"); + Assertions.assertTrue(postEvent, "pre event did not get fired"); + } + +} \ No newline at end of file diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEventTest.java b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEventTest.java new file mode 100644 index 0000000..c431552 --- /dev/null +++ b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/CATreatAnvilResultEventTest.java @@ -0,0 +1,7 @@ +package xyz.alexcrea.cuanvil.api.event.listener; + +public class CATreatAnvilResultEventTest { + + //TODO + +} \ No newline at end of file diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/NoStartupTriggerEventTest.java b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/NoStartupTriggerEventTest.java new file mode 100644 index 0000000..701d737 --- /dev/null +++ b/src/test/java/xyz/alexcrea/cuanvil/api/event/listener/NoStartupTriggerEventTest.java @@ -0,0 +1,53 @@ +package xyz.alexcrea.cuanvil.api.event.listener; + +import io.delilaheve.CustomAnvil; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.AnvilInventory; +import org.junit.jupiter.api.*; +import org.mockbukkit.mockbukkit.MockBukkit; +import org.mockbukkit.mockbukkit.matcher.plugin.PluginManagerFiredEventClassMatcher; +import xyz.alexcrea.cuanvil.tests.SharedOnlyMockBukkit; + +public abstract class NoStartupTriggerEventTest extends SharedOnlyMockBukkit { + + public abstract Class getEventClass(); + + public CustomAnvil plugin; + public Player player; + public AnvilInventory anvil; + + @BeforeEach + public void setUpPost() { + Class eventClass = getEventClass(); + PluginManagerFiredEventClassMatcher matcher = PluginManagerFiredEventClassMatcher + .hasFiredEventInstance(eventClass); + + boolean beforeStart = matcher.matches(server.getPluginManager()); + Assertions.assertFalse(beforeStart, "Somehow, event fired before plugin being loaded ?"); + + // Load the plugin + plugin = MockBukkit.load(CustomAnvil.class); + + // Config load phase + server.getScheduler().performOneTick(); + + boolean postConfig = matcher.matches(server.getPluginManager()); + Assertions.assertFalse(postConfig, "Event fired before plugin finished being loaded"); + + // Simple pre anvil test + player = server.addPlayer(); + anvil = (AnvilInventory) server.createInventory(player, InventoryType.ANVIL); + player.openInventory(anvil); + } + + @AfterEach + public void tearDownPost() { + if (plugin != null) { + server.getPluginManager().disablePlugin(plugin); + plugin = null; + } + } + +} diff --git a/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java b/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java index 1228cda..2bfa02c 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java +++ b/src/test/java/xyz/alexcrea/cuanvil/util/CommonItemUtil.java @@ -7,7 +7,9 @@ import java.util.List; public class CommonItemUtil { - public static ItemStack sharpness(int level){ + public static ItemStack sharpness(Integer level){ + if(level == null) return null; + return AnvilFuseTestUtil.prepareItem( Material.DIAMOND_SWORD, List.of("sharpness"), @@ -15,7 +17,9 @@ public class CommonItemUtil { ); } - public static ItemStack bane_of_arthropods(int level){ + public static ItemStack bane_of_arthropods(Integer level){ + if(level == null) return null; + return AnvilFuseTestUtil.prepareItem( Material.DIAMOND_SWORD, List.of("bane_of_arthropods"), @@ -23,5 +27,4 @@ public class CommonItemUtil { ); } - }