mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Added more Unit Tests
This commit is contained in:
parent
0af8c41eeb
commit
6a4e23853c
@ -4,11 +4,11 @@ import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
@ -30,13 +30,11 @@ public class DeathpointListener implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(EntityDeathEvent e) {
|
||||
if (e.getEntity().getType() == EntityType.PLAYER) {
|
||||
Player p = (Player) e.getEntity();
|
||||
public void onDeath(PlayerDeathEvent e) {
|
||||
Player p = e.getEntity();
|
||||
|
||||
if (SlimefunUtils.containsSimilarItem(p.getInventory(), SlimefunItems.GPS_EMERGENCY_TRANSMITTER, true)) {
|
||||
SlimefunPlugin.getGPSNetwork().addWaypoint(p, "player:death " + SlimefunPlugin.getLocal().getMessage(p, "gps.deathpoint").replace("%date%", format.format(LocalDateTime.now())), p.getLocation().getBlock().getLocation());
|
||||
}
|
||||
if (SlimefunUtils.containsSimilarItem(p.getInventory(), SlimefunItems.GPS_EMERGENCY_TRANSMITTER, true)) {
|
||||
SlimefunPlugin.getGPSNetwork().addWaypoint(p, "player:death " + SlimefunPlugin.getLocal().getMessage(p, "gps.deathpoint").replace("%date%", format.format(LocalDateTime.now())), p.getLocation().getBlock().getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import java.util.UUID;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@ -24,29 +24,26 @@ public class SoulboundListener implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDamage(EntityDeathEvent e) {
|
||||
if (e.getEntity() instanceof Player) {
|
||||
Player p = (Player) e.getEntity();
|
||||
public void onDamage(PlayerDeathEvent e) {
|
||||
Player p = e.getEntity();
|
||||
|
||||
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
|
||||
ItemStack item = p.getInventory().getItem(slot);
|
||||
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
|
||||
ItemStack item = p.getInventory().getItem(slot);
|
||||
|
||||
// Store soulbound items for later retrieval
|
||||
if (SlimefunUtils.isSoulbound(item)) {
|
||||
storeItem(p.getUniqueId(), slot, item);
|
||||
}
|
||||
// Store soulbound items for later retrieval
|
||||
if (SlimefunUtils.isSoulbound(item)) {
|
||||
storeItem(p.getUniqueId(), slot, item);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove soulbound items from our drops
|
||||
Iterator<ItemStack> drops = e.getDrops().iterator();
|
||||
while (drops.hasNext()) {
|
||||
ItemStack item = drops.next();
|
||||
// Remove soulbound items from our drops
|
||||
Iterator<ItemStack> drops = e.getDrops().iterator();
|
||||
while (drops.hasNext()) {
|
||||
ItemStack item = drops.next();
|
||||
|
||||
if (SlimefunUtils.isSoulbound(item)) {
|
||||
drops.remove();
|
||||
}
|
||||
if (SlimefunUtils.isSoulbound(item)) {
|
||||
drops.remove();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -180,6 +180,11 @@ public class SlimefunItemStack extends CustomItem {
|
||||
return new SlimefunItemStack(id, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SlimefunItemStack (" + id + ')';
|
||||
}
|
||||
|
||||
public Optional<String> getSkullTexture() {
|
||||
return Optional.ofNullable(texture);
|
||||
}
|
||||
|
@ -0,0 +1,41 @@
|
||||
package io.github.thebusybiscuit.slimefun4.annotations;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.ArgumentsProvider;
|
||||
import org.junit.jupiter.params.support.AnnotationConsumer;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
|
||||
public class SlimefunItemsProvider implements ArgumentsProvider, AnnotationConsumer<SlimefunItemsSource> {
|
||||
|
||||
private String[] items;
|
||||
|
||||
@Override
|
||||
public void accept(SlimefunItemsSource source) {
|
||||
items = source.items();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception {
|
||||
return Arrays.stream(items).map(this::getAsItemStack).map(Arguments::of);
|
||||
}
|
||||
|
||||
private ItemStack getAsItemStack(String fieldName) {
|
||||
Class<SlimefunItems> clazz = SlimefunItems.class;
|
||||
Field field;
|
||||
try {
|
||||
field = clazz.getField(fieldName);
|
||||
return (ItemStack) field.get(null);
|
||||
}
|
||||
catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||
throw new IllegalArgumentException("Could not find field SlimefunItems." + fieldName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package io.github.thebusybiscuit.slimefun4.annotations;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
|
||||
@Documented
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@ArgumentsSource(SlimefunItemsProvider.class)
|
||||
public @interface SlimefunItemsSource {
|
||||
|
||||
String[] items();
|
||||
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
package io.github.thebusybiscuit.slimefun4.tests.listeners;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
|
||||
import be.seeseemelk.mockbukkit.MockBukkit;
|
||||
import be.seeseemelk.mockbukkit.ServerMock;
|
||||
import be.seeseemelk.mockbukkit.block.BlockStateMock;
|
||||
import io.github.thebusybiscuit.slimefun4.annotations.SlimefunItemsSource;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.CargoNodeListener;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
|
||||
public class TestCargoNodeListener {
|
||||
|
||||
private static SlimefunPlugin plugin;
|
||||
private static CargoNodeListener listener;
|
||||
private static ServerMock server;
|
||||
|
||||
@BeforeAll
|
||||
public static void load() {
|
||||
server = MockBukkit.mock();
|
||||
plugin = MockBukkit.load(SlimefunPlugin.class);
|
||||
listener = new CargoNodeListener(plugin);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void unload() {
|
||||
MockBukkit.unmock();
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@SlimefunItemsSource(items = { "CARGO_INPUT", "CARGO_OUTPUT", "CARGO_OUTPUT_ADVANCED" })
|
||||
public void testSidePlacement(ItemStack item) {
|
||||
Player player = server.addPlayer();
|
||||
Location l = new Location(player.getWorld(), 190, 50, 400);
|
||||
Block b = l.getBlock();
|
||||
Block against = b.getRelative(BlockFace.NORTH);
|
||||
|
||||
BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
|
||||
listener.onCargoNodePlace(event);
|
||||
Assertions.assertFalse(event.isCancelled());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@SlimefunItemsSource(items = { "CARGO_INPUT", "CARGO_OUTPUT", "CARGO_OUTPUT_ADVANCED" })
|
||||
public void testInvalidPlacement(ItemStack item) {
|
||||
Player player = server.addPlayer();
|
||||
Location l = new Location(player.getWorld(), 190, 50, 400);
|
||||
Block b = l.getBlock();
|
||||
Block against = b.getRelative(BlockFace.DOWN);
|
||||
|
||||
BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
|
||||
listener.onCargoNodePlace(event);
|
||||
Assertions.assertTrue(event.isCancelled());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNonCargoNode() {
|
||||
Player player = server.addPlayer();
|
||||
Location l = new Location(player.getWorld(), 190, 50, 400);
|
||||
Block b = l.getBlock();
|
||||
Block against = b.getRelative(BlockFace.DOWN);
|
||||
|
||||
ItemStack item = new ItemStack(Material.PLAYER_HEAD);
|
||||
|
||||
BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
|
||||
listener.onCargoNodePlace(event);
|
||||
Assertions.assertFalse(event.isCancelled());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package io.github.thebusybiscuit.slimefun4.tests.listeners;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import be.seeseemelk.mockbukkit.MockBukkit;
|
||||
import be.seeseemelk.mockbukkit.ServerMock;
|
||||
import io.github.thebusybiscuit.slimefun4.api.events.WaypointCreateEvent;
|
||||
import io.github.thebusybiscuit.slimefun4.api.gps.GPSNetwork;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.DeathpointListener;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
|
||||
public class TestDeathpointListener {
|
||||
|
||||
private static SlimefunPlugin plugin;
|
||||
private static DeathpointListener listener;
|
||||
private static GPSNetwork network;
|
||||
private static ServerMock server;
|
||||
|
||||
@BeforeAll
|
||||
public static void load() {
|
||||
server = MockBukkit.mock();
|
||||
plugin = MockBukkit.load(SlimefunPlugin.class);
|
||||
listener = new DeathpointListener(plugin);
|
||||
network = new GPSNetwork();
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void unload() {
|
||||
MockBukkit.unmock();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled("MockBukkit does not implement Inventory#getStorageContents()")
|
||||
public void testNoTransmitter() {
|
||||
Player player = server.addPlayer();
|
||||
|
||||
player.setHealth(0);
|
||||
Assertions.assertThrows(AssertionError.class, () -> server.getPluginManager().assertEventFired(WaypointCreateEvent.class, event -> event.getPlayer() == player && event.isDeathpoint()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled("MockBukkit does not implement Inventory#getStorageContents()")
|
||||
public void testTransmitter() {
|
||||
Player player = server.addPlayer();
|
||||
player.getInventory().setItem(8, SlimefunItems.GPS_EMERGENCY_TRANSMITTER.clone());
|
||||
|
||||
player.setHealth(0);
|
||||
server.getPluginManager().assertEventFired(WaypointCreateEvent.class, event -> event.getPlayer() == player && event.isDeathpoint());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user