Add some more event listener test

This commit is contained in:
alexcrea 2025-07-25 06:30:19 +02:00
parent e4176404ac
commit 0f1aed8156
Signed by: alexcrea
GPG key ID: E346CD16413450E3
7 changed files with 183 additions and 44 deletions

View file

@ -51,57 +51,38 @@ public class AnvilFuseTests extends SharedCustomAnvilTest {
anvil = null; 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 @Test
public void mergeFuseTest(){ public void mergeFuseTest(){
// Literally just test a sharpness 4 + sharpness 4 mergeFuseData(4, 4, 5)
ItemStack sharpness4 = CommonItemUtil.sharpness(4); .executeTest(anvil, player);
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);
} }
@Test @Test
public void overFuseTest(){ public void overFuseTest(){
// Test sharpness 4 + sharpness 5 mergeFuseData(4, 5, 5)
ItemStack sharpness4 = CommonItemUtil.sharpness(4); .executeTest(anvil, player);
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);
} }
@Test @Test
public void underFuseTest(){ 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 mergeFuseData(5, 4, null)
ItemStack sharpness4 = CommonItemUtil.sharpness(4); .executeTest(anvil, player);
ItemStack sharpness5 = CommonItemUtil.sharpness(5);
AnvilFuseTestData data = new AnvilFuseTestData(
sharpness5, sharpness4,
null
);
data.executeTest(anvil, player);
} }
// Note: currently anvil can only have null name. maybe handle differently later // Note: currently anvil can only have null name. maybe handle differently later

View file

@ -0,0 +1,7 @@
package xyz.alexcrea.cuanvil.api.event.listener;
public class CAClickResultBypassEventTest {
//TODO
}

View file

@ -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<? extends Event> 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");
}
}

View file

@ -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<? extends Event> 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");
}
}

View file

@ -0,0 +1,7 @@
package xyz.alexcrea.cuanvil.api.event.listener;
public class CATreatAnvilResultEventTest {
//TODO
}

View file

@ -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<? extends Event> getEventClass();
public CustomAnvil plugin;
public Player player;
public AnvilInventory anvil;
@BeforeEach
public void setUpPost() {
Class<? extends Event> 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;
}
}
}

View file

@ -7,7 +7,9 @@ import java.util.List;
public class CommonItemUtil { public class CommonItemUtil {
public static ItemStack sharpness(int level){ public static ItemStack sharpness(Integer level){
if(level == null) return null;
return AnvilFuseTestUtil.prepareItem( return AnvilFuseTestUtil.prepareItem(
Material.DIAMOND_SWORD, Material.DIAMOND_SWORD,
List.of("sharpness"), 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( return AnvilFuseTestUtil.prepareItem(
Material.DIAMOND_SWORD, Material.DIAMOND_SWORD,
List.of("bane_of_arthropods"), List.of("bane_of_arthropods"),
@ -23,5 +27,4 @@ public class CommonItemUtil {
); );
} }
} }